package org.xtext.example.mydsl.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.xtext.example.mydsl.services.MyDslGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalMyDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'library'", "'{'", "'}'", "'scene'", "'parametric'", "';'", "'width'", "':'", "'length'", "'height'", "'texture'", "'imageUrl'", "'color'", "'translation'", "'('", "','", "')'", "'prototype'", "'wall'", "'start'", "'end'", "'point'", "'roof'", "'elevation'", "'door'", "'position'", "'window'", "'heightAboveGround'", "'margin'", "'value'", "'building'", "'circle'", "'radius'", "'polygon'"
    };
    public static final int RULE_ID=4;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int EOF=-1;
    public static final int T__19=19;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__44=44;
    public static final int RULE_SL_COMMENT=8;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int RULE_STRING=5;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalMyDslParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
    public String getGrammarFileName() { return "../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }



     	private MyDslGrammarAccess grammarAccess;
     	
        public InternalMyDslParser(TokenStream input, MyDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Model";	
       	}
       	
       	@Override
       	protected MyDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleModel"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:67:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
    public final EObject entryRuleModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModel = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:68:2: (iv_ruleModel= ruleModel EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:69:2: iv_ruleModel= ruleModel EOF
            {
             newCompositeNode(grammarAccess.getModelRule()); 
            pushFollow(FOLLOW_ruleModel_in_entryRuleModel75);
            iv_ruleModel=ruleModel();

            state._fsp--;

             current =iv_ruleModel; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleModel85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModel"


    // $ANTLR start "ruleModel"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:76:1: ruleModel returns [EObject current=null] : ( (lv_elements_0_0= ruleType ) )* ;
    public final EObject ruleModel() throws RecognitionException {
        EObject current = null;

        EObject lv_elements_0_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:79:28: ( ( (lv_elements_0_0= ruleType ) )* )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:80:1: ( (lv_elements_0_0= ruleType ) )*
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:80:1: ( (lv_elements_0_0= ruleType ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==11||LA1_0==14) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: (lv_elements_0_0= ruleType )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:81:1: (lv_elements_0_0= ruleType )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:3: lv_elements_0_0= ruleType
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getModelAccess().getElementsTypeParserRuleCall_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleType_in_ruleModel130);
            	    lv_elements_0_0=ruleType();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getModelRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"elements",
            	            		lv_elements_0_0, 
            	            		"Type");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModel"


    // $ANTLR start "entryRuleType"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:106:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ;
    public final EObject entryRuleType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleType = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:107:2: (iv_ruleType= ruleType EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:2: iv_ruleType= ruleType EOF
            {
             newCompositeNode(grammarAccess.getTypeRule()); 
            pushFollow(FOLLOW_ruleType_in_entryRuleType166);
            iv_ruleType=ruleType();

            state._fsp--;

             current =iv_ruleType; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleType176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleType"


    // $ANTLR start "ruleType"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:115:1: ruleType returns [EObject current=null] : (this_Library_0= ruleLibrary | this_Scene_1= ruleScene ) ;
    public final EObject ruleType() throws RecognitionException {
        EObject current = null;

        EObject this_Library_0 = null;

        EObject this_Scene_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:118:28: ( (this_Library_0= ruleLibrary | this_Scene_1= ruleScene ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:119:1: (this_Library_0= ruleLibrary | this_Scene_1= ruleScene )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:119:1: (this_Library_0= ruleLibrary | this_Scene_1= ruleScene )
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==11) ) {
                alt2=1;
            }
            else if ( (LA2_0==14) ) {
                alt2=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }
            switch (alt2) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:120:5: this_Library_0= ruleLibrary
                    {
                     
                            newCompositeNode(grammarAccess.getTypeAccess().getLibraryParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleLibrary_in_ruleType223);
                    this_Library_0=ruleLibrary();

                    state._fsp--;

                     
                            current = this_Library_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:130:5: this_Scene_1= ruleScene
                    {
                     
                            newCompositeNode(grammarAccess.getTypeAccess().getSceneParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleScene_in_ruleType250);
                    this_Scene_1=ruleScene();

                    state._fsp--;

                     
                            current = this_Scene_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleType"


    // $ANTLR start "entryRuleLibrary"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:146:1: entryRuleLibrary returns [EObject current=null] : iv_ruleLibrary= ruleLibrary EOF ;
    public final EObject entryRuleLibrary() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLibrary = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:147:2: (iv_ruleLibrary= ruleLibrary EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:148:2: iv_ruleLibrary= ruleLibrary EOF
            {
             newCompositeNode(grammarAccess.getLibraryRule()); 
            pushFollow(FOLLOW_ruleLibrary_in_entryRuleLibrary285);
            iv_ruleLibrary=ruleLibrary();

            state._fsp--;

             current =iv_ruleLibrary; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleLibrary295); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLibrary"


    // $ANTLR start "ruleLibrary"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:155:1: ruleLibrary returns [EObject current=null] : (otherlv_0= 'library' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_textures_3_0= ruleTexture ) )* ( (lv_prototypes_4_0= rulePrototype ) )* otherlv_5= '}' ) ;
    public final EObject ruleLibrary() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_5=null;
        EObject lv_textures_3_0 = null;

        EObject lv_prototypes_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:158:28: ( (otherlv_0= 'library' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_textures_3_0= ruleTexture ) )* ( (lv_prototypes_4_0= rulePrototype ) )* otherlv_5= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:159:1: (otherlv_0= 'library' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_textures_3_0= ruleTexture ) )* ( (lv_prototypes_4_0= rulePrototype ) )* otherlv_5= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:159:1: (otherlv_0= 'library' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_textures_3_0= ruleTexture ) )* ( (lv_prototypes_4_0= rulePrototype ) )* otherlv_5= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:159:3: otherlv_0= 'library' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_textures_3_0= ruleTexture ) )* ( (lv_prototypes_4_0= rulePrototype ) )* otherlv_5= '}'
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleLibrary332); 

                	newLeafNode(otherlv_0, grammarAccess.getLibraryAccess().getLibraryKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:163:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:164:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:164:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:165:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleLibrary349); 

            			newLeafNode(lv_name_1_0, grammarAccess.getLibraryAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getLibraryRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleLibrary366); 

                	newLeafNode(otherlv_2, grammarAccess.getLibraryAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:185:1: ( (lv_textures_3_0= ruleTexture ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==21) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:186:1: (lv_textures_3_0= ruleTexture )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:186:1: (lv_textures_3_0= ruleTexture )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:187:3: lv_textures_3_0= ruleTexture
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getLibraryAccess().getTexturesTextureParserRuleCall_3_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleTexture_in_ruleLibrary387);
            	    lv_textures_3_0=ruleTexture();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getLibraryRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"textures",
            	            		lv_textures_3_0, 
            	            		"Texture");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:203:3: ( (lv_prototypes_4_0= rulePrototype ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==28) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:204:1: (lv_prototypes_4_0= rulePrototype )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:204:1: (lv_prototypes_4_0= rulePrototype )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:205:3: lv_prototypes_4_0= rulePrototype
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getLibraryAccess().getPrototypesPrototypeParserRuleCall_4_0()); 
            	    	    
            	    pushFollow(FOLLOW_rulePrototype_in_ruleLibrary409);
            	    lv_prototypes_4_0=rulePrototype();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getLibraryRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"prototypes",
            	            		lv_prototypes_4_0, 
            	            		"Prototype");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);

            otherlv_5=(Token)match(input,13,FOLLOW_13_in_ruleLibrary422); 

                	newLeafNode(otherlv_5, grammarAccess.getLibraryAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLibrary"


    // $ANTLR start "entryRuleScene"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:233:1: entryRuleScene returns [EObject current=null] : iv_ruleScene= ruleScene EOF ;
    public final EObject entryRuleScene() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleScene = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:234:2: (iv_ruleScene= ruleScene EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:235:2: iv_ruleScene= ruleScene EOF
            {
             newCompositeNode(grammarAccess.getSceneRule()); 
            pushFollow(FOLLOW_ruleScene_in_entryRuleScene458);
            iv_ruleScene=ruleScene();

            state._fsp--;

             current =iv_ruleScene; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleScene468); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleScene"


    // $ANTLR start "ruleScene"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:242:1: ruleScene returns [EObject current=null] : (otherlv_0= 'scene' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_parametrics_3_0= ruleParametric ) )* ( (lv_buildings_4_0= ruleBuilding ) )* ( (lv_surfaces_5_0= ruleSurface ) )* otherlv_6= '}' ) ;
    public final EObject ruleScene() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_6=null;
        EObject lv_parametrics_3_0 = null;

        EObject lv_buildings_4_0 = null;

        EObject lv_surfaces_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:245:28: ( (otherlv_0= 'scene' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_parametrics_3_0= ruleParametric ) )* ( (lv_buildings_4_0= ruleBuilding ) )* ( (lv_surfaces_5_0= ruleSurface ) )* otherlv_6= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:246:1: (otherlv_0= 'scene' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_parametrics_3_0= ruleParametric ) )* ( (lv_buildings_4_0= ruleBuilding ) )* ( (lv_surfaces_5_0= ruleSurface ) )* otherlv_6= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:246:1: (otherlv_0= 'scene' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_parametrics_3_0= ruleParametric ) )* ( (lv_buildings_4_0= ruleBuilding ) )* ( (lv_surfaces_5_0= ruleSurface ) )* otherlv_6= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:246:3: otherlv_0= 'scene' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_parametrics_3_0= ruleParametric ) )* ( (lv_buildings_4_0= ruleBuilding ) )* ( (lv_surfaces_5_0= ruleSurface ) )* otherlv_6= '}'
            {
            otherlv_0=(Token)match(input,14,FOLLOW_14_in_ruleScene505); 

                	newLeafNode(otherlv_0, grammarAccess.getSceneAccess().getSceneKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:251:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:251:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:252:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleScene522); 

            			newLeafNode(lv_name_1_0, grammarAccess.getSceneAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getSceneRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleScene539); 

                	newLeafNode(otherlv_2, grammarAccess.getSceneAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:272:1: ( (lv_parametrics_3_0= ruleParametric ) )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==15) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:273:1: (lv_parametrics_3_0= ruleParametric )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:273:1: (lv_parametrics_3_0= ruleParametric )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:274:3: lv_parametrics_3_0= ruleParametric
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getSceneAccess().getParametricsParametricParserRuleCall_3_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleParametric_in_ruleScene560);
            	    lv_parametrics_3_0=ruleParametric();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getSceneRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"parametrics",
            	            		lv_parametrics_3_0, 
            	            		"Parametric");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:290:3: ( (lv_buildings_4_0= ruleBuilding ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==41) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:291:1: (lv_buildings_4_0= ruleBuilding )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:291:1: (lv_buildings_4_0= ruleBuilding )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:292:3: lv_buildings_4_0= ruleBuilding
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getSceneAccess().getBuildingsBuildingParserRuleCall_4_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleBuilding_in_ruleScene582);
            	    lv_buildings_4_0=ruleBuilding();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getSceneRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"buildings",
            	            		lv_buildings_4_0, 
            	            		"Building");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:308:3: ( (lv_surfaces_5_0= ruleSurface ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==42||LA7_0==44) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:309:1: (lv_surfaces_5_0= ruleSurface )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:309:1: (lv_surfaces_5_0= ruleSurface )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:310:3: lv_surfaces_5_0= ruleSurface
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getSceneAccess().getSurfacesSurfaceParserRuleCall_5_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleSurface_in_ruleScene604);
            	    lv_surfaces_5_0=ruleSurface();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getSceneRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"surfaces",
            	            		lv_surfaces_5_0, 
            	            		"Surface");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);

            otherlv_6=(Token)match(input,13,FOLLOW_13_in_ruleScene617); 

                	newLeafNode(otherlv_6, grammarAccess.getSceneAccess().getRightCurlyBracketKeyword_6());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleScene"


    // $ANTLR start "entryRuleParametric"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:338:1: entryRuleParametric returns [EObject current=null] : iv_ruleParametric= ruleParametric EOF ;
    public final EObject entryRuleParametric() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParametric = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:339:2: (iv_ruleParametric= ruleParametric EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:340:2: iv_ruleParametric= ruleParametric EOF
            {
             newCompositeNode(grammarAccess.getParametricRule()); 
            pushFollow(FOLLOW_ruleParametric_in_entryRuleParametric653);
            iv_ruleParametric=ruleParametric();

            state._fsp--;

             current =iv_ruleParametric; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParametric663); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParametric"


    // $ANTLR start "ruleParametric"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:347:1: ruleParametric returns [EObject current=null] : (otherlv_0= 'parametric' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? otherlv_21= '}' ) ;
    public final EObject ruleParametric() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_width_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_length_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_height_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token lv_texture_19_0=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        EObject lv_translation_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:350:28: ( (otherlv_0= 'parametric' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? otherlv_21= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:351:1: (otherlv_0= 'parametric' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? otherlv_21= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:351:1: (otherlv_0= 'parametric' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? otherlv_21= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:351:3: otherlv_0= 'parametric' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? otherlv_21= '}'
            {
            otherlv_0=(Token)match(input,15,FOLLOW_15_in_ruleParametric700); 

                	newLeafNode(otherlv_0, grammarAccess.getParametricAccess().getParametricKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:355:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:356:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:356:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:357:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParametric717); 

            			newLeafNode(lv_name_1_0, grammarAccess.getParametricAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getParametricRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleParametric734); 

                	newLeafNode(otherlv_2, grammarAccess.getParametricAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:377:1: ( (lv_translation_3_0= ruleTranslation ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:378:1: (lv_translation_3_0= ruleTranslation )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:378:1: (lv_translation_3_0= ruleTranslation )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:379:3: lv_translation_3_0= ruleTranslation
            {
             
            	        newCompositeNode(grammarAccess.getParametricAccess().getTranslationTranslationParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTranslation_in_ruleParametric755);
            lv_translation_3_0=ruleTranslation();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getParametricRule());
            	        }
                   		set(
                   			current, 
                   			"translation",
                    		lv_translation_3_0, 
                    		"Translation");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleParametric767); 

                	newLeafNode(otherlv_4, grammarAccess.getParametricAccess().getSemicolonKeyword_4());
                
            otherlv_5=(Token)match(input,17,FOLLOW_17_in_ruleParametric779); 

                	newLeafNode(otherlv_5, grammarAccess.getParametricAccess().getWidthKeyword_5());
                
            otherlv_6=(Token)match(input,18,FOLLOW_18_in_ruleParametric791); 

                	newLeafNode(otherlv_6, grammarAccess.getParametricAccess().getColonKeyword_6());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:407:1: ( (lv_width_7_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:408:1: (lv_width_7_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:408:1: (lv_width_7_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:409:3: lv_width_7_0= RULE_STRING
            {
            lv_width_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleParametric808); 

            			newLeafNode(lv_width_7_0, grammarAccess.getParametricAccess().getWidthSTRINGTerminalRuleCall_7_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getParametricRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"width",
                    		lv_width_7_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_8=(Token)match(input,16,FOLLOW_16_in_ruleParametric825); 

                	newLeafNode(otherlv_8, grammarAccess.getParametricAccess().getSemicolonKeyword_8());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:429:1: (otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';' )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==19) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:429:3: otherlv_9= 'length' otherlv_10= ':' ( (lv_length_11_0= RULE_STRING ) ) otherlv_12= ';'
                    {
                    otherlv_9=(Token)match(input,19,FOLLOW_19_in_ruleParametric838); 

                        	newLeafNode(otherlv_9, grammarAccess.getParametricAccess().getLengthKeyword_9_0());
                        
                    otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleParametric850); 

                        	newLeafNode(otherlv_10, grammarAccess.getParametricAccess().getColonKeyword_9_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:437:1: ( (lv_length_11_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:438:1: (lv_length_11_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:438:1: (lv_length_11_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:439:3: lv_length_11_0= RULE_STRING
                    {
                    lv_length_11_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleParametric867); 

                    			newLeafNode(lv_length_11_0, grammarAccess.getParametricAccess().getLengthSTRINGTerminalRuleCall_9_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getParametricRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"length",
                            		lv_length_11_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_12=(Token)match(input,16,FOLLOW_16_in_ruleParametric884); 

                        	newLeafNode(otherlv_12, grammarAccess.getParametricAccess().getSemicolonKeyword_9_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:459:3: (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==20) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:459:5: otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';'
                    {
                    otherlv_13=(Token)match(input,20,FOLLOW_20_in_ruleParametric899); 

                        	newLeafNode(otherlv_13, grammarAccess.getParametricAccess().getHeightKeyword_10_0());
                        
                    otherlv_14=(Token)match(input,18,FOLLOW_18_in_ruleParametric911); 

                        	newLeafNode(otherlv_14, grammarAccess.getParametricAccess().getColonKeyword_10_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:467:1: ( (lv_height_15_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:1: (lv_height_15_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:1: (lv_height_15_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:469:3: lv_height_15_0= RULE_STRING
                    {
                    lv_height_15_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleParametric928); 

                    			newLeafNode(lv_height_15_0, grammarAccess.getParametricAccess().getHeightSTRINGTerminalRuleCall_10_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getParametricRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"height",
                            		lv_height_15_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_16=(Token)match(input,16,FOLLOW_16_in_ruleParametric945); 

                        	newLeafNode(otherlv_16, grammarAccess.getParametricAccess().getSemicolonKeyword_10_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:489:3: (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==21) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:489:5: otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';'
                    {
                    otherlv_17=(Token)match(input,21,FOLLOW_21_in_ruleParametric960); 

                        	newLeafNode(otherlv_17, grammarAccess.getParametricAccess().getTextureKeyword_11_0());
                        
                    otherlv_18=(Token)match(input,18,FOLLOW_18_in_ruleParametric972); 

                        	newLeafNode(otherlv_18, grammarAccess.getParametricAccess().getColonKeyword_11_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:497:1: ( (lv_texture_19_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:498:1: (lv_texture_19_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:498:1: (lv_texture_19_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:499:3: lv_texture_19_0= RULE_STRING
                    {
                    lv_texture_19_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleParametric989); 

                    			newLeafNode(lv_texture_19_0, grammarAccess.getParametricAccess().getTextureSTRINGTerminalRuleCall_11_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getParametricRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_19_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_20=(Token)match(input,16,FOLLOW_16_in_ruleParametric1006); 

                        	newLeafNode(otherlv_20, grammarAccess.getParametricAccess().getSemicolonKeyword_11_3());
                        

                    }
                    break;

            }

            otherlv_21=(Token)match(input,13,FOLLOW_13_in_ruleParametric1020); 

                	newLeafNode(otherlv_21, grammarAccess.getParametricAccess().getRightCurlyBracketKeyword_12());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParametric"


    // $ANTLR start "entryRuleTexture"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:531:1: entryRuleTexture returns [EObject current=null] : iv_ruleTexture= ruleTexture EOF ;
    public final EObject entryRuleTexture() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTexture = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:532:2: (iv_ruleTexture= ruleTexture EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:533:2: iv_ruleTexture= ruleTexture EOF
            {
             newCompositeNode(grammarAccess.getTextureRule()); 
            pushFollow(FOLLOW_ruleTexture_in_entryRuleTexture1056);
            iv_ruleTexture=ruleTexture();

            state._fsp--;

             current =iv_ruleTexture; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTexture1066); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTexture"


    // $ANTLR start "ruleTexture"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:540:1: ruleTexture returns [EObject current=null] : (otherlv_0= 'texture' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) ;
    public final EObject ruleTexture() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_imgURL_5_0=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_color_9_0=null;
        Token otherlv_10=null;
        Token otherlv_11=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:543:28: ( (otherlv_0= 'texture' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:544:1: (otherlv_0= 'texture' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:544:1: (otherlv_0= 'texture' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:544:3: otherlv_0= 'texture' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}'
            {
            otherlv_0=(Token)match(input,21,FOLLOW_21_in_ruleTexture1103); 

                	newLeafNode(otherlv_0, grammarAccess.getTextureAccess().getTextureKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:548:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:549:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:549:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:550:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTexture1120); 

            			newLeafNode(lv_name_1_0, grammarAccess.getTextureAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getTextureRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleTexture1137); 

                	newLeafNode(otherlv_2, grammarAccess.getTextureAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:570:1: (otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';' )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==22) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:570:3: otherlv_3= 'imageUrl' otherlv_4= ':' ( (lv_imgURL_5_0= RULE_STRING ) ) otherlv_6= ';'
                    {
                    otherlv_3=(Token)match(input,22,FOLLOW_22_in_ruleTexture1150); 

                        	newLeafNode(otherlv_3, grammarAccess.getTextureAccess().getImageUrlKeyword_3_0());
                        
                    otherlv_4=(Token)match(input,18,FOLLOW_18_in_ruleTexture1162); 

                        	newLeafNode(otherlv_4, grammarAccess.getTextureAccess().getColonKeyword_3_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:578:1: ( (lv_imgURL_5_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:579:1: (lv_imgURL_5_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:579:1: (lv_imgURL_5_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:580:3: lv_imgURL_5_0= RULE_STRING
                    {
                    lv_imgURL_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTexture1179); 

                    			newLeafNode(lv_imgURL_5_0, grammarAccess.getTextureAccess().getImgURLSTRINGTerminalRuleCall_3_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getTextureRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"imgURL",
                            		lv_imgURL_5_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleTexture1196); 

                        	newLeafNode(otherlv_6, grammarAccess.getTextureAccess().getSemicolonKeyword_3_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:600:3: (otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';' )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==23) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:600:5: otherlv_7= 'color' otherlv_8= ':' ( (lv_color_9_0= RULE_STRING ) ) otherlv_10= ';'
                    {
                    otherlv_7=(Token)match(input,23,FOLLOW_23_in_ruleTexture1211); 

                        	newLeafNode(otherlv_7, grammarAccess.getTextureAccess().getColorKeyword_4_0());
                        
                    otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleTexture1223); 

                        	newLeafNode(otherlv_8, grammarAccess.getTextureAccess().getColonKeyword_4_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:608:1: ( (lv_color_9_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:609:1: (lv_color_9_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:609:1: (lv_color_9_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:610:3: lv_color_9_0= RULE_STRING
                    {
                    lv_color_9_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTexture1240); 

                    			newLeafNode(lv_color_9_0, grammarAccess.getTextureAccess().getColorSTRINGTerminalRuleCall_4_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getTextureRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"color",
                            		lv_color_9_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_10=(Token)match(input,16,FOLLOW_16_in_ruleTexture1257); 

                        	newLeafNode(otherlv_10, grammarAccess.getTextureAccess().getSemicolonKeyword_4_3());
                        

                    }
                    break;

            }

            otherlv_11=(Token)match(input,13,FOLLOW_13_in_ruleTexture1271); 

                	newLeafNode(otherlv_11, grammarAccess.getTextureAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTexture"


    // $ANTLR start "entryRuleTranslation"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:642:1: entryRuleTranslation returns [EObject current=null] : iv_ruleTranslation= ruleTranslation EOF ;
    public final EObject entryRuleTranslation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTranslation = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:643:2: (iv_ruleTranslation= ruleTranslation EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:644:2: iv_ruleTranslation= ruleTranslation EOF
            {
             newCompositeNode(grammarAccess.getTranslationRule()); 
            pushFollow(FOLLOW_ruleTranslation_in_entryRuleTranslation1307);
            iv_ruleTranslation=ruleTranslation();

            state._fsp--;

             current =iv_ruleTranslation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTranslation1317); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTranslation"


    // $ANTLR start "ruleTranslation"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:651:1: ruleTranslation returns [EObject current=null] : (otherlv_0= 'translation' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ',' ( (lv_zCord_6_0= RULE_STRING ) ) otherlv_7= ')' ) ;
    public final EObject ruleTranslation() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_xCord_2_0=null;
        Token otherlv_3=null;
        Token lv_yCord_4_0=null;
        Token otherlv_5=null;
        Token lv_zCord_6_0=null;
        Token otherlv_7=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:654:28: ( (otherlv_0= 'translation' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ',' ( (lv_zCord_6_0= RULE_STRING ) ) otherlv_7= ')' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:655:1: (otherlv_0= 'translation' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ',' ( (lv_zCord_6_0= RULE_STRING ) ) otherlv_7= ')' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:655:1: (otherlv_0= 'translation' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ',' ( (lv_zCord_6_0= RULE_STRING ) ) otherlv_7= ')' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:655:3: otherlv_0= 'translation' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ',' ( (lv_zCord_6_0= RULE_STRING ) ) otherlv_7= ')'
            {
            otherlv_0=(Token)match(input,24,FOLLOW_24_in_ruleTranslation1354); 

                	newLeafNode(otherlv_0, grammarAccess.getTranslationAccess().getTranslationKeyword_0());
                
            otherlv_1=(Token)match(input,25,FOLLOW_25_in_ruleTranslation1366); 

                	newLeafNode(otherlv_1, grammarAccess.getTranslationAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:663:1: ( (lv_xCord_2_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:664:1: (lv_xCord_2_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:664:1: (lv_xCord_2_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:665:3: lv_xCord_2_0= RULE_STRING
            {
            lv_xCord_2_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTranslation1383); 

            			newLeafNode(lv_xCord_2_0, grammarAccess.getTranslationAccess().getXCordSTRINGTerminalRuleCall_2_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getTranslationRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"xCord",
                    		lv_xCord_2_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_3=(Token)match(input,26,FOLLOW_26_in_ruleTranslation1400); 

                	newLeafNode(otherlv_3, grammarAccess.getTranslationAccess().getCommaKeyword_3());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:685:1: ( (lv_yCord_4_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:686:1: (lv_yCord_4_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:686:1: (lv_yCord_4_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:687:3: lv_yCord_4_0= RULE_STRING
            {
            lv_yCord_4_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTranslation1417); 

            			newLeafNode(lv_yCord_4_0, grammarAccess.getTranslationAccess().getYCordSTRINGTerminalRuleCall_4_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getTranslationRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"yCord",
                    		lv_yCord_4_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_5=(Token)match(input,26,FOLLOW_26_in_ruleTranslation1434); 

                	newLeafNode(otherlv_5, grammarAccess.getTranslationAccess().getCommaKeyword_5());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:707:1: ( (lv_zCord_6_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:708:1: (lv_zCord_6_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:708:1: (lv_zCord_6_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:709:3: lv_zCord_6_0= RULE_STRING
            {
            lv_zCord_6_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTranslation1451); 

            			newLeafNode(lv_zCord_6_0, grammarAccess.getTranslationAccess().getZCordSTRINGTerminalRuleCall_6_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getTranslationRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"zCord",
                    		lv_zCord_6_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_7=(Token)match(input,27,FOLLOW_27_in_ruleTranslation1468); 

                	newLeafNode(otherlv_7, grammarAccess.getTranslationAccess().getRightParenthesisKeyword_7());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTranslation"


    // $ANTLR start "entryRulePrototype"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:737:1: entryRulePrototype returns [EObject current=null] : iv_rulePrototype= rulePrototype EOF ;
    public final EObject entryRulePrototype() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrototype = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:738:2: (iv_rulePrototype= rulePrototype EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:739:2: iv_rulePrototype= rulePrototype EOF
            {
             newCompositeNode(grammarAccess.getPrototypeRule()); 
            pushFollow(FOLLOW_rulePrototype_in_entryRulePrototype1504);
            iv_rulePrototype=rulePrototype();

            state._fsp--;

             current =iv_rulePrototype; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePrototype1514); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePrototype"


    // $ANTLR start "rulePrototype"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:746:1: rulePrototype returns [EObject current=null] : (otherlv_0= 'prototype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' ( (lv_walls_5_0= ruleWall ) )* ( (lv_openings_6_0= ruleOpening ) )* ( (lv_roof_7_0= ruleRoof ) )? otherlv_8= '}' ) ;
    public final EObject rulePrototype() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_8=null;
        EObject lv_translation_3_0 = null;

        EObject lv_walls_5_0 = null;

        EObject lv_openings_6_0 = null;

        EObject lv_roof_7_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:749:28: ( (otherlv_0= 'prototype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' ( (lv_walls_5_0= ruleWall ) )* ( (lv_openings_6_0= ruleOpening ) )* ( (lv_roof_7_0= ruleRoof ) )? otherlv_8= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:750:1: (otherlv_0= 'prototype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' ( (lv_walls_5_0= ruleWall ) )* ( (lv_openings_6_0= ruleOpening ) )* ( (lv_roof_7_0= ruleRoof ) )? otherlv_8= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:750:1: (otherlv_0= 'prototype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' ( (lv_walls_5_0= ruleWall ) )* ( (lv_openings_6_0= ruleOpening ) )* ( (lv_roof_7_0= ruleRoof ) )? otherlv_8= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:750:3: otherlv_0= 'prototype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' ( (lv_walls_5_0= ruleWall ) )* ( (lv_openings_6_0= ruleOpening ) )* ( (lv_roof_7_0= ruleRoof ) )? otherlv_8= '}'
            {
            otherlv_0=(Token)match(input,28,FOLLOW_28_in_rulePrototype1551); 

                	newLeafNode(otherlv_0, grammarAccess.getPrototypeAccess().getPrototypeKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:754:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:755:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:755:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:756:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePrototype1568); 

            			newLeafNode(lv_name_1_0, grammarAccess.getPrototypeAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPrototypeRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_rulePrototype1585); 

                	newLeafNode(otherlv_2, grammarAccess.getPrototypeAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:776:1: ( (lv_translation_3_0= ruleTranslation ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:777:1: (lv_translation_3_0= ruleTranslation )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:777:1: (lv_translation_3_0= ruleTranslation )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:778:3: lv_translation_3_0= ruleTranslation
            {
             
            	        newCompositeNode(grammarAccess.getPrototypeAccess().getTranslationTranslationParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTranslation_in_rulePrototype1606);
            lv_translation_3_0=ruleTranslation();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getPrototypeRule());
            	        }
                   		set(
                   			current, 
                   			"translation",
                    		lv_translation_3_0, 
                    		"Translation");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,16,FOLLOW_16_in_rulePrototype1618); 

                	newLeafNode(otherlv_4, grammarAccess.getPrototypeAccess().getSemicolonKeyword_4());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:798:1: ( (lv_walls_5_0= ruleWall ) )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==29) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:799:1: (lv_walls_5_0= ruleWall )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:799:1: (lv_walls_5_0= ruleWall )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:800:3: lv_walls_5_0= ruleWall
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPrototypeAccess().getWallsWallParserRuleCall_5_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleWall_in_rulePrototype1639);
            	    lv_walls_5_0=ruleWall();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPrototypeRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"walls",
            	            		lv_walls_5_0, 
            	            		"Wall");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:816:3: ( (lv_openings_6_0= ruleOpening ) )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==35||LA14_0==37) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:817:1: (lv_openings_6_0= ruleOpening )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:817:1: (lv_openings_6_0= ruleOpening )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:818:3: lv_openings_6_0= ruleOpening
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPrototypeAccess().getOpeningsOpeningParserRuleCall_6_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleOpening_in_rulePrototype1661);
            	    lv_openings_6_0=ruleOpening();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPrototypeRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"openings",
            	            		lv_openings_6_0, 
            	            		"Opening");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop14;
                }
            } while (true);

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:3: ( (lv_roof_7_0= ruleRoof ) )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==33) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:1: (lv_roof_7_0= ruleRoof )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:1: (lv_roof_7_0= ruleRoof )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:836:3: lv_roof_7_0= ruleRoof
                    {
                     
                    	        newCompositeNode(grammarAccess.getPrototypeAccess().getRoofRoofParserRuleCall_7_0()); 
                    	    
                    pushFollow(FOLLOW_ruleRoof_in_rulePrototype1683);
                    lv_roof_7_0=ruleRoof();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getPrototypeRule());
                    	        }
                           		set(
                           			current, 
                           			"roof",
                            		lv_roof_7_0, 
                            		"Roof");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }

            otherlv_8=(Token)match(input,13,FOLLOW_13_in_rulePrototype1696); 

                	newLeafNode(otherlv_8, grammarAccess.getPrototypeAccess().getRightCurlyBracketKeyword_8());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePrototype"


    // $ANTLR start "entryRuleWall"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:864:1: entryRuleWall returns [EObject current=null] : iv_ruleWall= ruleWall EOF ;
    public final EObject entryRuleWall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWall = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:865:2: (iv_ruleWall= ruleWall EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:866:2: iv_ruleWall= ruleWall EOF
            {
             newCompositeNode(grammarAccess.getWallRule()); 
            pushFollow(FOLLOW_ruleWall_in_entryRuleWall1732);
            iv_ruleWall=ruleWall();

            state._fsp--;

             current =iv_ruleWall; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleWall1742); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleWall"


    // $ANTLR start "ruleWall"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:873:1: ruleWall returns [EObject current=null] : (otherlv_0= 'wall' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'start' otherlv_4= ':' ( (lv_start_5_0= rulePoint ) ) otherlv_6= ';' otherlv_7= 'end' otherlv_8= ':' ( (lv_end_9_0= rulePoint ) ) otherlv_10= ';' otherlv_11= 'height' otherlv_12= ':' ( (lv_height_13_0= RULE_STRING ) ) otherlv_14= ';' otherlv_15= 'texture' otherlv_16= ':' ( (lv_texture_17_0= RULE_STRING ) ) otherlv_18= ';' ( (lv_door_19_0= ruleDoor ) )? ( (lv_windows_20_0= ruleWindow ) )* otherlv_21= '}' ) ;
    public final EObject ruleWall() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token lv_height_13_0=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token lv_texture_17_0=null;
        Token otherlv_18=null;
        Token otherlv_21=null;
        EObject lv_start_5_0 = null;

        EObject lv_end_9_0 = null;

        EObject lv_door_19_0 = null;

        EObject lv_windows_20_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:876:28: ( (otherlv_0= 'wall' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'start' otherlv_4= ':' ( (lv_start_5_0= rulePoint ) ) otherlv_6= ';' otherlv_7= 'end' otherlv_8= ':' ( (lv_end_9_0= rulePoint ) ) otherlv_10= ';' otherlv_11= 'height' otherlv_12= ':' ( (lv_height_13_0= RULE_STRING ) ) otherlv_14= ';' otherlv_15= 'texture' otherlv_16= ':' ( (lv_texture_17_0= RULE_STRING ) ) otherlv_18= ';' ( (lv_door_19_0= ruleDoor ) )? ( (lv_windows_20_0= ruleWindow ) )* otherlv_21= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:877:1: (otherlv_0= 'wall' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'start' otherlv_4= ':' ( (lv_start_5_0= rulePoint ) ) otherlv_6= ';' otherlv_7= 'end' otherlv_8= ':' ( (lv_end_9_0= rulePoint ) ) otherlv_10= ';' otherlv_11= 'height' otherlv_12= ':' ( (lv_height_13_0= RULE_STRING ) ) otherlv_14= ';' otherlv_15= 'texture' otherlv_16= ':' ( (lv_texture_17_0= RULE_STRING ) ) otherlv_18= ';' ( (lv_door_19_0= ruleDoor ) )? ( (lv_windows_20_0= ruleWindow ) )* otherlv_21= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:877:1: (otherlv_0= 'wall' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'start' otherlv_4= ':' ( (lv_start_5_0= rulePoint ) ) otherlv_6= ';' otherlv_7= 'end' otherlv_8= ':' ( (lv_end_9_0= rulePoint ) ) otherlv_10= ';' otherlv_11= 'height' otherlv_12= ':' ( (lv_height_13_0= RULE_STRING ) ) otherlv_14= ';' otherlv_15= 'texture' otherlv_16= ':' ( (lv_texture_17_0= RULE_STRING ) ) otherlv_18= ';' ( (lv_door_19_0= ruleDoor ) )? ( (lv_windows_20_0= ruleWindow ) )* otherlv_21= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:877:3: otherlv_0= 'wall' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'start' otherlv_4= ':' ( (lv_start_5_0= rulePoint ) ) otherlv_6= ';' otherlv_7= 'end' otherlv_8= ':' ( (lv_end_9_0= rulePoint ) ) otherlv_10= ';' otherlv_11= 'height' otherlv_12= ':' ( (lv_height_13_0= RULE_STRING ) ) otherlv_14= ';' otherlv_15= 'texture' otherlv_16= ':' ( (lv_texture_17_0= RULE_STRING ) ) otherlv_18= ';' ( (lv_door_19_0= ruleDoor ) )? ( (lv_windows_20_0= ruleWindow ) )* otherlv_21= '}'
            {
            otherlv_0=(Token)match(input,29,FOLLOW_29_in_ruleWall1779); 

                	newLeafNode(otherlv_0, grammarAccess.getWallAccess().getWallKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:881:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:882:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:882:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:883:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleWall1796); 

            			newLeafNode(lv_name_1_0, grammarAccess.getWallAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getWallRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleWall1813); 

                	newLeafNode(otherlv_2, grammarAccess.getWallAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,30,FOLLOW_30_in_ruleWall1825); 

                	newLeafNode(otherlv_3, grammarAccess.getWallAccess().getStartKeyword_3());
                
            otherlv_4=(Token)match(input,18,FOLLOW_18_in_ruleWall1837); 

                	newLeafNode(otherlv_4, grammarAccess.getWallAccess().getColonKeyword_4());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:911:1: ( (lv_start_5_0= rulePoint ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:912:1: (lv_start_5_0= rulePoint )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:912:1: (lv_start_5_0= rulePoint )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:913:3: lv_start_5_0= rulePoint
            {
             
            	        newCompositeNode(grammarAccess.getWallAccess().getStartPointParserRuleCall_5_0()); 
            	    
            pushFollow(FOLLOW_rulePoint_in_ruleWall1858);
            lv_start_5_0=rulePoint();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getWallRule());
            	        }
                   		set(
                   			current, 
                   			"start",
                    		lv_start_5_0, 
                    		"Point");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleWall1870); 

                	newLeafNode(otherlv_6, grammarAccess.getWallAccess().getSemicolonKeyword_6());
                
            otherlv_7=(Token)match(input,31,FOLLOW_31_in_ruleWall1882); 

                	newLeafNode(otherlv_7, grammarAccess.getWallAccess().getEndKeyword_7());
                
            otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleWall1894); 

                	newLeafNode(otherlv_8, grammarAccess.getWallAccess().getColonKeyword_8());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:941:1: ( (lv_end_9_0= rulePoint ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:942:1: (lv_end_9_0= rulePoint )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:942:1: (lv_end_9_0= rulePoint )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:943:3: lv_end_9_0= rulePoint
            {
             
            	        newCompositeNode(grammarAccess.getWallAccess().getEndPointParserRuleCall_9_0()); 
            	    
            pushFollow(FOLLOW_rulePoint_in_ruleWall1915);
            lv_end_9_0=rulePoint();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getWallRule());
            	        }
                   		set(
                   			current, 
                   			"end",
                    		lv_end_9_0, 
                    		"Point");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_10=(Token)match(input,16,FOLLOW_16_in_ruleWall1927); 

                	newLeafNode(otherlv_10, grammarAccess.getWallAccess().getSemicolonKeyword_10());
                
            otherlv_11=(Token)match(input,20,FOLLOW_20_in_ruleWall1939); 

                	newLeafNode(otherlv_11, grammarAccess.getWallAccess().getHeightKeyword_11());
                
            otherlv_12=(Token)match(input,18,FOLLOW_18_in_ruleWall1951); 

                	newLeafNode(otherlv_12, grammarAccess.getWallAccess().getColonKeyword_12());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:971:1: ( (lv_height_13_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:972:1: (lv_height_13_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:972:1: (lv_height_13_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:973:3: lv_height_13_0= RULE_STRING
            {
            lv_height_13_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWall1968); 

            			newLeafNode(lv_height_13_0, grammarAccess.getWallAccess().getHeightSTRINGTerminalRuleCall_13_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getWallRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"height",
                    		lv_height_13_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_14=(Token)match(input,16,FOLLOW_16_in_ruleWall1985); 

                	newLeafNode(otherlv_14, grammarAccess.getWallAccess().getSemicolonKeyword_14());
                
            otherlv_15=(Token)match(input,21,FOLLOW_21_in_ruleWall1997); 

                	newLeafNode(otherlv_15, grammarAccess.getWallAccess().getTextureKeyword_15());
                
            otherlv_16=(Token)match(input,18,FOLLOW_18_in_ruleWall2009); 

                	newLeafNode(otherlv_16, grammarAccess.getWallAccess().getColonKeyword_16());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1001:1: ( (lv_texture_17_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1002:1: (lv_texture_17_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1002:1: (lv_texture_17_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1003:3: lv_texture_17_0= RULE_STRING
            {
            lv_texture_17_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWall2026); 

            			newLeafNode(lv_texture_17_0, grammarAccess.getWallAccess().getTextureSTRINGTerminalRuleCall_17_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getWallRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"texture",
                    		lv_texture_17_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_18=(Token)match(input,16,FOLLOW_16_in_ruleWall2043); 

                	newLeafNode(otherlv_18, grammarAccess.getWallAccess().getSemicolonKeyword_18());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1023:1: ( (lv_door_19_0= ruleDoor ) )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==35) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1024:1: (lv_door_19_0= ruleDoor )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1024:1: (lv_door_19_0= ruleDoor )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1025:3: lv_door_19_0= ruleDoor
                    {
                     
                    	        newCompositeNode(grammarAccess.getWallAccess().getDoorDoorParserRuleCall_19_0()); 
                    	    
                    pushFollow(FOLLOW_ruleDoor_in_ruleWall2064);
                    lv_door_19_0=ruleDoor();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getWallRule());
                    	        }
                           		set(
                           			current, 
                           			"door",
                            		lv_door_19_0, 
                            		"Door");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1041:3: ( (lv_windows_20_0= ruleWindow ) )*
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==37) ) {
                    alt17=1;
                }


                switch (alt17) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1042:1: (lv_windows_20_0= ruleWindow )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1042:1: (lv_windows_20_0= ruleWindow )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1043:3: lv_windows_20_0= ruleWindow
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getWallAccess().getWindowsWindowParserRuleCall_20_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleWindow_in_ruleWall2086);
            	    lv_windows_20_0=ruleWindow();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getWallRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"windows",
            	            		lv_windows_20_0, 
            	            		"Window");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop17;
                }
            } while (true);

            otherlv_21=(Token)match(input,13,FOLLOW_13_in_ruleWall2099); 

                	newLeafNode(otherlv_21, grammarAccess.getWallAccess().getRightCurlyBracketKeyword_21());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleWall"


    // $ANTLR start "entryRulePoint"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1071:1: entryRulePoint returns [EObject current=null] : iv_rulePoint= rulePoint EOF ;
    public final EObject entryRulePoint() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePoint = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1072:2: (iv_rulePoint= rulePoint EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1073:2: iv_rulePoint= rulePoint EOF
            {
             newCompositeNode(grammarAccess.getPointRule()); 
            pushFollow(FOLLOW_rulePoint_in_entryRulePoint2135);
            iv_rulePoint=rulePoint();

            state._fsp--;

             current =iv_rulePoint; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePoint2145); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePoint"


    // $ANTLR start "rulePoint"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1080:1: rulePoint returns [EObject current=null] : (otherlv_0= 'point' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ')' ) ;
    public final EObject rulePoint() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_xCord_2_0=null;
        Token otherlv_3=null;
        Token lv_yCord_4_0=null;
        Token otherlv_5=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1083:28: ( (otherlv_0= 'point' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ')' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1084:1: (otherlv_0= 'point' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ')' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1084:1: (otherlv_0= 'point' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ')' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1084:3: otherlv_0= 'point' otherlv_1= '(' ( (lv_xCord_2_0= RULE_STRING ) ) otherlv_3= ',' ( (lv_yCord_4_0= RULE_STRING ) ) otherlv_5= ')'
            {
            otherlv_0=(Token)match(input,32,FOLLOW_32_in_rulePoint2182); 

                	newLeafNode(otherlv_0, grammarAccess.getPointAccess().getPointKeyword_0());
                
            otherlv_1=(Token)match(input,25,FOLLOW_25_in_rulePoint2194); 

                	newLeafNode(otherlv_1, grammarAccess.getPointAccess().getLeftParenthesisKeyword_1());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1092:1: ( (lv_xCord_2_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1093:1: (lv_xCord_2_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1093:1: (lv_xCord_2_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1094:3: lv_xCord_2_0= RULE_STRING
            {
            lv_xCord_2_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePoint2211); 

            			newLeafNode(lv_xCord_2_0, grammarAccess.getPointAccess().getXCordSTRINGTerminalRuleCall_2_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPointRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"xCord",
                    		lv_xCord_2_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_3=(Token)match(input,26,FOLLOW_26_in_rulePoint2228); 

                	newLeafNode(otherlv_3, grammarAccess.getPointAccess().getCommaKeyword_3());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1114:1: ( (lv_yCord_4_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1115:1: (lv_yCord_4_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1115:1: (lv_yCord_4_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1116:3: lv_yCord_4_0= RULE_STRING
            {
            lv_yCord_4_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePoint2245); 

            			newLeafNode(lv_yCord_4_0, grammarAccess.getPointAccess().getYCordSTRINGTerminalRuleCall_4_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPointRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"yCord",
                    		lv_yCord_4_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_5=(Token)match(input,27,FOLLOW_27_in_rulePoint2262); 

                	newLeafNode(otherlv_5, grammarAccess.getPointAccess().getRightParenthesisKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePoint"


    // $ANTLR start "entryRuleRoof"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1144:1: entryRuleRoof returns [EObject current=null] : iv_ruleRoof= ruleRoof EOF ;
    public final EObject entryRuleRoof() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRoof = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1145:2: (iv_ruleRoof= ruleRoof EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1146:2: iv_ruleRoof= ruleRoof EOF
            {
             newCompositeNode(grammarAccess.getRoofRule()); 
            pushFollow(FOLLOW_ruleRoof_in_entryRuleRoof2298);
            iv_ruleRoof=ruleRoof();

            state._fsp--;

             current =iv_ruleRoof; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRoof2308); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRoof"


    // $ANTLR start "ruleRoof"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1153:1: ruleRoof returns [EObject current=null] : (otherlv_0= 'roof' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) ;
    public final EObject ruleRoof() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_elevation_5_0=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_texture_9_0=null;
        Token otherlv_10=null;
        Token otherlv_11=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1156:28: ( (otherlv_0= 'roof' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:1: (otherlv_0= 'roof' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:1: (otherlv_0= 'roof' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:3: otherlv_0= 'roof' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )? (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}'
            {
            otherlv_0=(Token)match(input,33,FOLLOW_33_in_ruleRoof2345); 

                	newLeafNode(otherlv_0, grammarAccess.getRoofAccess().getRoofKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1161:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1162:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1162:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1163:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRoof2362); 

            			newLeafNode(lv_name_1_0, grammarAccess.getRoofAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getRoofRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleRoof2379); 

                	newLeafNode(otherlv_2, grammarAccess.getRoofAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:1: (otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';' )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==34) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1183:3: otherlv_3= 'elevation' otherlv_4= ':' ( (lv_elevation_5_0= RULE_STRING ) ) otherlv_6= ';'
                    {
                    otherlv_3=(Token)match(input,34,FOLLOW_34_in_ruleRoof2392); 

                        	newLeafNode(otherlv_3, grammarAccess.getRoofAccess().getElevationKeyword_3_0());
                        
                    otherlv_4=(Token)match(input,18,FOLLOW_18_in_ruleRoof2404); 

                        	newLeafNode(otherlv_4, grammarAccess.getRoofAccess().getColonKeyword_3_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1191:1: ( (lv_elevation_5_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1192:1: (lv_elevation_5_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1192:1: (lv_elevation_5_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1193:3: lv_elevation_5_0= RULE_STRING
                    {
                    lv_elevation_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleRoof2421); 

                    			newLeafNode(lv_elevation_5_0, grammarAccess.getRoofAccess().getElevationSTRINGTerminalRuleCall_3_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getRoofRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"elevation",
                            		lv_elevation_5_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleRoof2438); 

                        	newLeafNode(otherlv_6, grammarAccess.getRoofAccess().getSemicolonKeyword_3_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1213:3: (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==21) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1213:5: otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';'
                    {
                    otherlv_7=(Token)match(input,21,FOLLOW_21_in_ruleRoof2453); 

                        	newLeafNode(otherlv_7, grammarAccess.getRoofAccess().getTextureKeyword_4_0());
                        
                    otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleRoof2465); 

                        	newLeafNode(otherlv_8, grammarAccess.getRoofAccess().getColonKeyword_4_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1221:1: ( (lv_texture_9_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1222:1: (lv_texture_9_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1222:1: (lv_texture_9_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1223:3: lv_texture_9_0= RULE_STRING
                    {
                    lv_texture_9_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleRoof2482); 

                    			newLeafNode(lv_texture_9_0, grammarAccess.getRoofAccess().getTextureSTRINGTerminalRuleCall_4_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getRoofRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_9_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_10=(Token)match(input,16,FOLLOW_16_in_ruleRoof2499); 

                        	newLeafNode(otherlv_10, grammarAccess.getRoofAccess().getSemicolonKeyword_4_3());
                        

                    }
                    break;

            }

            otherlv_11=(Token)match(input,13,FOLLOW_13_in_ruleRoof2513); 

                	newLeafNode(otherlv_11, grammarAccess.getRoofAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRoof"


    // $ANTLR start "entryRuleOpening"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1255:1: entryRuleOpening returns [EObject current=null] : iv_ruleOpening= ruleOpening EOF ;
    public final EObject entryRuleOpening() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOpening = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1256:2: (iv_ruleOpening= ruleOpening EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1257:2: iv_ruleOpening= ruleOpening EOF
            {
             newCompositeNode(grammarAccess.getOpeningRule()); 
            pushFollow(FOLLOW_ruleOpening_in_entryRuleOpening2549);
            iv_ruleOpening=ruleOpening();

            state._fsp--;

             current =iv_ruleOpening; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpening2559); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpening"


    // $ANTLR start "ruleOpening"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1264:1: ruleOpening returns [EObject current=null] : (this_Door_0= ruleDoor | this_Window_1= ruleWindow ) ;
    public final EObject ruleOpening() throws RecognitionException {
        EObject current = null;

        EObject this_Door_0 = null;

        EObject this_Window_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1267:28: ( (this_Door_0= ruleDoor | this_Window_1= ruleWindow ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268:1: (this_Door_0= ruleDoor | this_Window_1= ruleWindow )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1268:1: (this_Door_0= ruleDoor | this_Window_1= ruleWindow )
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==35) ) {
                alt20=1;
            }
            else if ( (LA20_0==37) ) {
                alt20=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 20, 0, input);

                throw nvae;
            }
            switch (alt20) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1269:5: this_Door_0= ruleDoor
                    {
                     
                            newCompositeNode(grammarAccess.getOpeningAccess().getDoorParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleDoor_in_ruleOpening2606);
                    this_Door_0=ruleDoor();

                    state._fsp--;

                     
                            current = this_Door_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1279:5: this_Window_1= ruleWindow
                    {
                     
                            newCompositeNode(grammarAccess.getOpeningAccess().getWindowParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleWindow_in_ruleOpening2633);
                    this_Window_1=ruleWindow();

                    state._fsp--;

                     
                            current = this_Window_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpening"


    // $ANTLR start "entryRuleDoor"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1295:1: entryRuleDoor returns [EObject current=null] : iv_ruleDoor= ruleDoor EOF ;
    public final EObject entryRuleDoor() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDoor = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1296:2: (iv_ruleDoor= ruleDoor EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1297:2: iv_ruleDoor= ruleDoor EOF
            {
             newCompositeNode(grammarAccess.getDoorRule()); 
            pushFollow(FOLLOW_ruleDoor_in_entryRuleDoor2668);
            iv_ruleDoor=ruleDoor();

            state._fsp--;

             current =iv_ruleDoor; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDoor2678); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDoor"


    // $ANTLR start "ruleDoor"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1304:1: ruleDoor returns [EObject current=null] : (otherlv_0= 'door' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )? otherlv_23= '}' ) ;
    public final EObject ruleDoor() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_position_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_width_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_height_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token lv_texture_19_0=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        EObject lv_translation_3_0 = null;

        EObject lv_margin_21_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1307:28: ( (otherlv_0= 'door' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )? otherlv_23= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1308:1: (otherlv_0= 'door' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )? otherlv_23= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1308:1: (otherlv_0= 'door' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )? otherlv_23= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1308:3: otherlv_0= 'door' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )? ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )? otherlv_23= '}'
            {
            otherlv_0=(Token)match(input,35,FOLLOW_35_in_ruleDoor2715); 

                	newLeafNode(otherlv_0, grammarAccess.getDoorAccess().getDoorKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1312:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1313:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1313:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1314:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDoor2732); 

            			newLeafNode(lv_name_1_0, grammarAccess.getDoorAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getDoorRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleDoor2749); 

                	newLeafNode(otherlv_2, grammarAccess.getDoorAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1334:1: ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==24) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1334:2: ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1334:2: ( (lv_translation_3_0= ruleTranslation ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1335:1: (lv_translation_3_0= ruleTranslation )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1335:1: (lv_translation_3_0= ruleTranslation )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1336:3: lv_translation_3_0= ruleTranslation
                    {
                     
                    	        newCompositeNode(grammarAccess.getDoorAccess().getTranslationTranslationParserRuleCall_3_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleTranslation_in_ruleDoor2771);
                    lv_translation_3_0=ruleTranslation();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getDoorRule());
                    	        }
                           		set(
                           			current, 
                           			"translation",
                            		lv_translation_3_0, 
                            		"Translation");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleDoor2783); 

                        	newLeafNode(otherlv_4, grammarAccess.getDoorAccess().getSemicolonKeyword_3_1());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1356:3: (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==36) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1356:5: otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';'
                    {
                    otherlv_5=(Token)match(input,36,FOLLOW_36_in_ruleDoor2798); 

                        	newLeafNode(otherlv_5, grammarAccess.getDoorAccess().getPositionKeyword_4_0());
                        
                    otherlv_6=(Token)match(input,18,FOLLOW_18_in_ruleDoor2810); 

                        	newLeafNode(otherlv_6, grammarAccess.getDoorAccess().getColonKeyword_4_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1364:1: ( (lv_position_7_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1365:1: (lv_position_7_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1365:1: (lv_position_7_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1366:3: lv_position_7_0= RULE_STRING
                    {
                    lv_position_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDoor2827); 

                    			newLeafNode(lv_position_7_0, grammarAccess.getDoorAccess().getPositionSTRINGTerminalRuleCall_4_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getDoorRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"position",
                            		lv_position_7_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_8=(Token)match(input,16,FOLLOW_16_in_ruleDoor2844); 

                        	newLeafNode(otherlv_8, grammarAccess.getDoorAccess().getSemicolonKeyword_4_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1386:3: (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==17) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1386:5: otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';'
                    {
                    otherlv_9=(Token)match(input,17,FOLLOW_17_in_ruleDoor2859); 

                        	newLeafNode(otherlv_9, grammarAccess.getDoorAccess().getWidthKeyword_5_0());
                        
                    otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleDoor2871); 

                        	newLeafNode(otherlv_10, grammarAccess.getDoorAccess().getColonKeyword_5_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1394:1: ( (lv_width_11_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1395:1: (lv_width_11_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1395:1: (lv_width_11_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1396:3: lv_width_11_0= RULE_STRING
                    {
                    lv_width_11_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDoor2888); 

                    			newLeafNode(lv_width_11_0, grammarAccess.getDoorAccess().getWidthSTRINGTerminalRuleCall_5_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getDoorRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"width",
                            		lv_width_11_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_12=(Token)match(input,16,FOLLOW_16_in_ruleDoor2905); 

                        	newLeafNode(otherlv_12, grammarAccess.getDoorAccess().getSemicolonKeyword_5_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1416:3: (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( (LA24_0==20) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1416:5: otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';'
                    {
                    otherlv_13=(Token)match(input,20,FOLLOW_20_in_ruleDoor2920); 

                        	newLeafNode(otherlv_13, grammarAccess.getDoorAccess().getHeightKeyword_6_0());
                        
                    otherlv_14=(Token)match(input,18,FOLLOW_18_in_ruleDoor2932); 

                        	newLeafNode(otherlv_14, grammarAccess.getDoorAccess().getColonKeyword_6_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1424:1: ( (lv_height_15_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1425:1: (lv_height_15_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1425:1: (lv_height_15_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1426:3: lv_height_15_0= RULE_STRING
                    {
                    lv_height_15_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDoor2949); 

                    			newLeafNode(lv_height_15_0, grammarAccess.getDoorAccess().getHeightSTRINGTerminalRuleCall_6_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getDoorRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"height",
                            		lv_height_15_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_16=(Token)match(input,16,FOLLOW_16_in_ruleDoor2966); 

                        	newLeafNode(otherlv_16, grammarAccess.getDoorAccess().getSemicolonKeyword_6_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1446:3: (otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';' )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==21) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1446:5: otherlv_17= 'texture' otherlv_18= ':' ( (lv_texture_19_0= RULE_STRING ) ) otherlv_20= ';'
                    {
                    otherlv_17=(Token)match(input,21,FOLLOW_21_in_ruleDoor2981); 

                        	newLeafNode(otherlv_17, grammarAccess.getDoorAccess().getTextureKeyword_7_0());
                        
                    otherlv_18=(Token)match(input,18,FOLLOW_18_in_ruleDoor2993); 

                        	newLeafNode(otherlv_18, grammarAccess.getDoorAccess().getColonKeyword_7_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1454:1: ( (lv_texture_19_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1455:1: (lv_texture_19_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1455:1: (lv_texture_19_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1456:3: lv_texture_19_0= RULE_STRING
                    {
                    lv_texture_19_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDoor3010); 

                    			newLeafNode(lv_texture_19_0, grammarAccess.getDoorAccess().getTextureSTRINGTerminalRuleCall_7_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getDoorRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_19_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_20=(Token)match(input,16,FOLLOW_16_in_ruleDoor3027); 

                        	newLeafNode(otherlv_20, grammarAccess.getDoorAccess().getSemicolonKeyword_7_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1476:3: ( ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';' )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==39) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1476:4: ( (lv_margin_21_0= ruleMargin ) ) otherlv_22= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1476:4: ( (lv_margin_21_0= ruleMargin ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1477:1: (lv_margin_21_0= ruleMargin )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1477:1: (lv_margin_21_0= ruleMargin )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1478:3: lv_margin_21_0= ruleMargin
                    {
                     
                    	        newCompositeNode(grammarAccess.getDoorAccess().getMarginMarginParserRuleCall_8_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleMargin_in_ruleDoor3051);
                    lv_margin_21_0=ruleMargin();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getDoorRule());
                    	        }
                           		set(
                           			current, 
                           			"margin",
                            		lv_margin_21_0, 
                            		"Margin");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_22=(Token)match(input,16,FOLLOW_16_in_ruleDoor3063); 

                        	newLeafNode(otherlv_22, grammarAccess.getDoorAccess().getSemicolonKeyword_8_1());
                        

                    }
                    break;

            }

            otherlv_23=(Token)match(input,13,FOLLOW_13_in_ruleDoor3077); 

                	newLeafNode(otherlv_23, grammarAccess.getDoorAccess().getRightCurlyBracketKeyword_9());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDoor"


    // $ANTLR start "entryRuleWindow"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1510:1: entryRuleWindow returns [EObject current=null] : iv_ruleWindow= ruleWindow EOF ;
    public final EObject entryRuleWindow() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleWindow = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1511:2: (iv_ruleWindow= ruleWindow EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1512:2: iv_ruleWindow= ruleWindow EOF
            {
             newCompositeNode(grammarAccess.getWindowRule()); 
            pushFollow(FOLLOW_ruleWindow_in_entryRuleWindow3113);
            iv_ruleWindow=ruleWindow();

            state._fsp--;

             current =iv_ruleWindow; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleWindow3123); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleWindow"


    // $ANTLR start "ruleWindow"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1519:1: ruleWindow returns [EObject current=null] : (otherlv_0= 'window' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )? (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )? ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )? ( (lv_points_27_0= rulePoint ) )* otherlv_28= '}' ) ;
    public final EObject ruleWindow() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_position_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_width_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_height_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token lv_heightAboveGround_19_0=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token lv_texture_23_0=null;
        Token otherlv_24=null;
        Token otherlv_26=null;
        Token otherlv_28=null;
        EObject lv_translation_3_0 = null;

        EObject lv_margin_25_0 = null;

        EObject lv_points_27_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1522:28: ( (otherlv_0= 'window' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )? (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )? ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )? ( (lv_points_27_0= rulePoint ) )* otherlv_28= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1523:1: (otherlv_0= 'window' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )? (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )? ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )? ( (lv_points_27_0= rulePoint ) )* otherlv_28= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1523:1: (otherlv_0= 'window' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )? (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )? ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )? ( (lv_points_27_0= rulePoint ) )* otherlv_28= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1523:3: otherlv_0= 'window' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )? (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )? (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )? ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )? ( (lv_points_27_0= rulePoint ) )* otherlv_28= '}'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleWindow3160); 

                	newLeafNode(otherlv_0, grammarAccess.getWindowAccess().getWindowKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1527:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1528:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1528:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1529:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleWindow3177); 

            			newLeafNode(lv_name_1_0, grammarAccess.getWindowAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getWindowRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleWindow3194); 

                	newLeafNode(otherlv_2, grammarAccess.getWindowAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1549:1: ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==24) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1549:2: ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1549:2: ( (lv_translation_3_0= ruleTranslation ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1550:1: (lv_translation_3_0= ruleTranslation )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1550:1: (lv_translation_3_0= ruleTranslation )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1551:3: lv_translation_3_0= ruleTranslation
                    {
                     
                    	        newCompositeNode(grammarAccess.getWindowAccess().getTranslationTranslationParserRuleCall_3_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleTranslation_in_ruleWindow3216);
                    lv_translation_3_0=ruleTranslation();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getWindowRule());
                    	        }
                           		set(
                           			current, 
                           			"translation",
                            		lv_translation_3_0, 
                            		"Translation");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleWindow3228); 

                        	newLeafNode(otherlv_4, grammarAccess.getWindowAccess().getSemicolonKeyword_3_1());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1571:3: (otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';' )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==36) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1571:5: otherlv_5= 'position' otherlv_6= ':' ( (lv_position_7_0= RULE_STRING ) ) otherlv_8= ';'
                    {
                    otherlv_5=(Token)match(input,36,FOLLOW_36_in_ruleWindow3243); 

                        	newLeafNode(otherlv_5, grammarAccess.getWindowAccess().getPositionKeyword_4_0());
                        
                    otherlv_6=(Token)match(input,18,FOLLOW_18_in_ruleWindow3255); 

                        	newLeafNode(otherlv_6, grammarAccess.getWindowAccess().getColonKeyword_4_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1579:1: ( (lv_position_7_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1580:1: (lv_position_7_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1580:1: (lv_position_7_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1581:3: lv_position_7_0= RULE_STRING
                    {
                    lv_position_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWindow3272); 

                    			newLeafNode(lv_position_7_0, grammarAccess.getWindowAccess().getPositionSTRINGTerminalRuleCall_4_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getWindowRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"position",
                            		lv_position_7_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_8=(Token)match(input,16,FOLLOW_16_in_ruleWindow3289); 

                        	newLeafNode(otherlv_8, grammarAccess.getWindowAccess().getSemicolonKeyword_4_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1601:3: (otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';' )?
            int alt29=2;
            int LA29_0 = input.LA(1);

            if ( (LA29_0==17) ) {
                alt29=1;
            }
            switch (alt29) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1601:5: otherlv_9= 'width' otherlv_10= ':' ( (lv_width_11_0= RULE_STRING ) ) otherlv_12= ';'
                    {
                    otherlv_9=(Token)match(input,17,FOLLOW_17_in_ruleWindow3304); 

                        	newLeafNode(otherlv_9, grammarAccess.getWindowAccess().getWidthKeyword_5_0());
                        
                    otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleWindow3316); 

                        	newLeafNode(otherlv_10, grammarAccess.getWindowAccess().getColonKeyword_5_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1609:1: ( (lv_width_11_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1610:1: (lv_width_11_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1610:1: (lv_width_11_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1611:3: lv_width_11_0= RULE_STRING
                    {
                    lv_width_11_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWindow3333); 

                    			newLeafNode(lv_width_11_0, grammarAccess.getWindowAccess().getWidthSTRINGTerminalRuleCall_5_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getWindowRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"width",
                            		lv_width_11_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_12=(Token)match(input,16,FOLLOW_16_in_ruleWindow3350); 

                        	newLeafNode(otherlv_12, grammarAccess.getWindowAccess().getSemicolonKeyword_5_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1631:3: (otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';' )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==20) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1631:5: otherlv_13= 'height' otherlv_14= ':' ( (lv_height_15_0= RULE_STRING ) ) otherlv_16= ';'
                    {
                    otherlv_13=(Token)match(input,20,FOLLOW_20_in_ruleWindow3365); 

                        	newLeafNode(otherlv_13, grammarAccess.getWindowAccess().getHeightKeyword_6_0());
                        
                    otherlv_14=(Token)match(input,18,FOLLOW_18_in_ruleWindow3377); 

                        	newLeafNode(otherlv_14, grammarAccess.getWindowAccess().getColonKeyword_6_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1639:1: ( (lv_height_15_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1640:1: (lv_height_15_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1640:1: (lv_height_15_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1641:3: lv_height_15_0= RULE_STRING
                    {
                    lv_height_15_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWindow3394); 

                    			newLeafNode(lv_height_15_0, grammarAccess.getWindowAccess().getHeightSTRINGTerminalRuleCall_6_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getWindowRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"height",
                            		lv_height_15_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_16=(Token)match(input,16,FOLLOW_16_in_ruleWindow3411); 

                        	newLeafNode(otherlv_16, grammarAccess.getWindowAccess().getSemicolonKeyword_6_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1661:3: (otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';' )?
            int alt31=2;
            int LA31_0 = input.LA(1);

            if ( (LA31_0==38) ) {
                alt31=1;
            }
            switch (alt31) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1661:5: otherlv_17= 'heightAboveGround' otherlv_18= ':' ( (lv_heightAboveGround_19_0= RULE_STRING ) ) otherlv_20= ';'
                    {
                    otherlv_17=(Token)match(input,38,FOLLOW_38_in_ruleWindow3426); 

                        	newLeafNode(otherlv_17, grammarAccess.getWindowAccess().getHeightAboveGroundKeyword_7_0());
                        
                    otherlv_18=(Token)match(input,18,FOLLOW_18_in_ruleWindow3438); 

                        	newLeafNode(otherlv_18, grammarAccess.getWindowAccess().getColonKeyword_7_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1669:1: ( (lv_heightAboveGround_19_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1670:1: (lv_heightAboveGround_19_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1670:1: (lv_heightAboveGround_19_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1671:3: lv_heightAboveGround_19_0= RULE_STRING
                    {
                    lv_heightAboveGround_19_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWindow3455); 

                    			newLeafNode(lv_heightAboveGround_19_0, grammarAccess.getWindowAccess().getHeightAboveGroundSTRINGTerminalRuleCall_7_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getWindowRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"heightAboveGround",
                            		lv_heightAboveGround_19_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_20=(Token)match(input,16,FOLLOW_16_in_ruleWindow3472); 

                        	newLeafNode(otherlv_20, grammarAccess.getWindowAccess().getSemicolonKeyword_7_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1691:3: (otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';' )?
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==21) ) {
                alt32=1;
            }
            switch (alt32) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1691:5: otherlv_21= 'texture' otherlv_22= ':' ( (lv_texture_23_0= RULE_STRING ) ) otherlv_24= ';'
                    {
                    otherlv_21=(Token)match(input,21,FOLLOW_21_in_ruleWindow3487); 

                        	newLeafNode(otherlv_21, grammarAccess.getWindowAccess().getTextureKeyword_8_0());
                        
                    otherlv_22=(Token)match(input,18,FOLLOW_18_in_ruleWindow3499); 

                        	newLeafNode(otherlv_22, grammarAccess.getWindowAccess().getColonKeyword_8_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1699:1: ( (lv_texture_23_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1700:1: (lv_texture_23_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1700:1: (lv_texture_23_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1701:3: lv_texture_23_0= RULE_STRING
                    {
                    lv_texture_23_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleWindow3516); 

                    			newLeafNode(lv_texture_23_0, grammarAccess.getWindowAccess().getTextureSTRINGTerminalRuleCall_8_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getWindowRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_23_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_24=(Token)match(input,16,FOLLOW_16_in_ruleWindow3533); 

                        	newLeafNode(otherlv_24, grammarAccess.getWindowAccess().getSemicolonKeyword_8_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1721:3: ( ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';' )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==39) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1721:4: ( (lv_margin_25_0= ruleMargin ) ) otherlv_26= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1721:4: ( (lv_margin_25_0= ruleMargin ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1722:1: (lv_margin_25_0= ruleMargin )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1722:1: (lv_margin_25_0= ruleMargin )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1723:3: lv_margin_25_0= ruleMargin
                    {
                     
                    	        newCompositeNode(grammarAccess.getWindowAccess().getMarginMarginParserRuleCall_9_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleMargin_in_ruleWindow3557);
                    lv_margin_25_0=ruleMargin();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getWindowRule());
                    	        }
                           		set(
                           			current, 
                           			"margin",
                            		lv_margin_25_0, 
                            		"Margin");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_26=(Token)match(input,16,FOLLOW_16_in_ruleWindow3569); 

                        	newLeafNode(otherlv_26, grammarAccess.getWindowAccess().getSemicolonKeyword_9_1());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1743:3: ( (lv_points_27_0= rulePoint ) )*
            loop34:
            do {
                int alt34=2;
                int LA34_0 = input.LA(1);

                if ( (LA34_0==32) ) {
                    alt34=1;
                }


                switch (alt34) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1744:1: (lv_points_27_0= rulePoint )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1744:1: (lv_points_27_0= rulePoint )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1745:3: lv_points_27_0= rulePoint
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getWindowAccess().getPointsPointParserRuleCall_10_0()); 
            	    	    
            	    pushFollow(FOLLOW_rulePoint_in_ruleWindow3592);
            	    lv_points_27_0=rulePoint();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getWindowRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"points",
            	            		lv_points_27_0, 
            	            		"Point");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop34;
                }
            } while (true);

            otherlv_28=(Token)match(input,13,FOLLOW_13_in_ruleWindow3605); 

                	newLeafNode(otherlv_28, grammarAccess.getWindowAccess().getRightCurlyBracketKeyword_11());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleWindow"


    // $ANTLR start "entryRuleMargin"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1773:1: entryRuleMargin returns [EObject current=null] : iv_ruleMargin= ruleMargin EOF ;
    public final EObject entryRuleMargin() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMargin = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1774:2: (iv_ruleMargin= ruleMargin EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1775:2: iv_ruleMargin= ruleMargin EOF
            {
             newCompositeNode(grammarAccess.getMarginRule()); 
            pushFollow(FOLLOW_ruleMargin_in_entryRuleMargin3641);
            iv_ruleMargin=ruleMargin();

            state._fsp--;

             current =iv_ruleMargin; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMargin3651); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMargin"


    // $ANTLR start "ruleMargin"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1782:1: ruleMargin returns [EObject current=null] : (otherlv_0= 'margin' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'value' otherlv_4= ':' ( (lv_value_5_0= RULE_STRING ) ) otherlv_6= ';' (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) ;
    public final EObject ruleMargin() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_value_5_0=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_texture_9_0=null;
        Token otherlv_10=null;
        Token otherlv_11=null;

         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1785:28: ( (otherlv_0= 'margin' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'value' otherlv_4= ':' ( (lv_value_5_0= RULE_STRING ) ) otherlv_6= ';' (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1786:1: (otherlv_0= 'margin' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'value' otherlv_4= ':' ( (lv_value_5_0= RULE_STRING ) ) otherlv_6= ';' (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1786:1: (otherlv_0= 'margin' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'value' otherlv_4= ':' ( (lv_value_5_0= RULE_STRING ) ) otherlv_6= ';' (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1786:3: otherlv_0= 'margin' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'value' otherlv_4= ':' ( (lv_value_5_0= RULE_STRING ) ) otherlv_6= ';' (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )? otherlv_11= '}'
            {
            otherlv_0=(Token)match(input,39,FOLLOW_39_in_ruleMargin3688); 

                	newLeafNode(otherlv_0, grammarAccess.getMarginAccess().getMarginKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1790:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1791:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1791:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1792:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMargin3705); 

            			newLeafNode(lv_name_1_0, grammarAccess.getMarginAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMarginRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleMargin3722); 

                	newLeafNode(otherlv_2, grammarAccess.getMarginAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,40,FOLLOW_40_in_ruleMargin3734); 

                	newLeafNode(otherlv_3, grammarAccess.getMarginAccess().getValueKeyword_3());
                
            otherlv_4=(Token)match(input,18,FOLLOW_18_in_ruleMargin3746); 

                	newLeafNode(otherlv_4, grammarAccess.getMarginAccess().getColonKeyword_4());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1820:1: ( (lv_value_5_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1821:1: (lv_value_5_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1821:1: (lv_value_5_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1822:3: lv_value_5_0= RULE_STRING
            {
            lv_value_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMargin3763); 

            			newLeafNode(lv_value_5_0, grammarAccess.getMarginAccess().getValueSTRINGTerminalRuleCall_5_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMarginRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"value",
                    		lv_value_5_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_6=(Token)match(input,16,FOLLOW_16_in_ruleMargin3780); 

                	newLeafNode(otherlv_6, grammarAccess.getMarginAccess().getSemicolonKeyword_6());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1842:1: (otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';' )?
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==21) ) {
                alt35=1;
            }
            switch (alt35) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1842:3: otherlv_7= 'texture' otherlv_8= ':' ( (lv_texture_9_0= RULE_STRING ) ) otherlv_10= ';'
                    {
                    otherlv_7=(Token)match(input,21,FOLLOW_21_in_ruleMargin3793); 

                        	newLeafNode(otherlv_7, grammarAccess.getMarginAccess().getTextureKeyword_7_0());
                        
                    otherlv_8=(Token)match(input,18,FOLLOW_18_in_ruleMargin3805); 

                        	newLeafNode(otherlv_8, grammarAccess.getMarginAccess().getColonKeyword_7_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1850:1: ( (lv_texture_9_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1851:1: (lv_texture_9_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1851:1: (lv_texture_9_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1852:3: lv_texture_9_0= RULE_STRING
                    {
                    lv_texture_9_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMargin3822); 

                    			newLeafNode(lv_texture_9_0, grammarAccess.getMarginAccess().getTextureSTRINGTerminalRuleCall_7_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getMarginRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_9_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_10=(Token)match(input,16,FOLLOW_16_in_ruleMargin3839); 

                        	newLeafNode(otherlv_10, grammarAccess.getMarginAccess().getSemicolonKeyword_7_3());
                        

                    }
                    break;

            }

            otherlv_11=(Token)match(input,13,FOLLOW_13_in_ruleMargin3853); 

                	newLeafNode(otherlv_11, grammarAccess.getMarginAccess().getRightCurlyBracketKeyword_8());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMargin"


    // $ANTLR start "entryRuleBuilding"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1884:1: entryRuleBuilding returns [EObject current=null] : iv_ruleBuilding= ruleBuilding EOF ;
    public final EObject entryRuleBuilding() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBuilding = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1885:2: (iv_ruleBuilding= ruleBuilding EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1886:2: iv_ruleBuilding= ruleBuilding EOF
            {
             newCompositeNode(grammarAccess.getBuildingRule()); 
            pushFollow(FOLLOW_ruleBuilding_in_entryRuleBuilding3889);
            iv_ruleBuilding=ruleBuilding();

            state._fsp--;

             current =iv_ruleBuilding; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleBuilding3899); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBuilding"


    // $ANTLR start "ruleBuilding"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1893:1: ruleBuilding returns [EObject current=null] : (otherlv_0= 'building' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? otherlv_5= 'prototype' otherlv_6= ':' ( (lv_prototype_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= '}' ) ;
    public final EObject ruleBuilding() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_prototype_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        EObject lv_translation_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1896:28: ( (otherlv_0= 'building' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? otherlv_5= 'prototype' otherlv_6= ':' ( (lv_prototype_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1897:1: (otherlv_0= 'building' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? otherlv_5= 'prototype' otherlv_6= ':' ( (lv_prototype_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1897:1: (otherlv_0= 'building' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? otherlv_5= 'prototype' otherlv_6= ':' ( (lv_prototype_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1897:3: otherlv_0= 'building' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )? otherlv_5= 'prototype' otherlv_6= ':' ( (lv_prototype_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= '}'
            {
            otherlv_0=(Token)match(input,41,FOLLOW_41_in_ruleBuilding3936); 

                	newLeafNode(otherlv_0, grammarAccess.getBuildingAccess().getBuildingKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1901:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1902:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1902:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1903:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleBuilding3953); 

            			newLeafNode(lv_name_1_0, grammarAccess.getBuildingAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getBuildingRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleBuilding3970); 

                	newLeafNode(otherlv_2, grammarAccess.getBuildingAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1923:1: ( ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' )?
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==24) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1923:2: ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1923:2: ( (lv_translation_3_0= ruleTranslation ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1924:1: (lv_translation_3_0= ruleTranslation )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1924:1: (lv_translation_3_0= ruleTranslation )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1925:3: lv_translation_3_0= ruleTranslation
                    {
                     
                    	        newCompositeNode(grammarAccess.getBuildingAccess().getTranslationTranslationParserRuleCall_3_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleTranslation_in_ruleBuilding3992);
                    lv_translation_3_0=ruleTranslation();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getBuildingRule());
                    	        }
                           		set(
                           			current, 
                           			"translation",
                            		lv_translation_3_0, 
                            		"Translation");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleBuilding4004); 

                        	newLeafNode(otherlv_4, grammarAccess.getBuildingAccess().getSemicolonKeyword_3_1());
                        

                    }
                    break;

            }

            otherlv_5=(Token)match(input,28,FOLLOW_28_in_ruleBuilding4018); 

                	newLeafNode(otherlv_5, grammarAccess.getBuildingAccess().getPrototypeKeyword_4());
                
            otherlv_6=(Token)match(input,18,FOLLOW_18_in_ruleBuilding4030); 

                	newLeafNode(otherlv_6, grammarAccess.getBuildingAccess().getColonKeyword_5());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1953:1: ( (lv_prototype_7_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1954:1: (lv_prototype_7_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1954:1: (lv_prototype_7_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1955:3: lv_prototype_7_0= RULE_STRING
            {
            lv_prototype_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleBuilding4047); 

            			newLeafNode(lv_prototype_7_0, grammarAccess.getBuildingAccess().getPrototypeSTRINGTerminalRuleCall_6_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getBuildingRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"prototype",
                    		lv_prototype_7_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_8=(Token)match(input,16,FOLLOW_16_in_ruleBuilding4064); 

                	newLeafNode(otherlv_8, grammarAccess.getBuildingAccess().getSemicolonKeyword_7());
                
            otherlv_9=(Token)match(input,13,FOLLOW_13_in_ruleBuilding4076); 

                	newLeafNode(otherlv_9, grammarAccess.getBuildingAccess().getRightCurlyBracketKeyword_8());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBuilding"


    // $ANTLR start "entryRuleSurface"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1987:1: entryRuleSurface returns [EObject current=null] : iv_ruleSurface= ruleSurface EOF ;
    public final EObject entryRuleSurface() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSurface = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1988:2: (iv_ruleSurface= ruleSurface EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1989:2: iv_ruleSurface= ruleSurface EOF
            {
             newCompositeNode(grammarAccess.getSurfaceRule()); 
            pushFollow(FOLLOW_ruleSurface_in_entryRuleSurface4112);
            iv_ruleSurface=ruleSurface();

            state._fsp--;

             current =iv_ruleSurface; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSurface4122); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSurface"


    // $ANTLR start "ruleSurface"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1996:1: ruleSurface returns [EObject current=null] : (this_Circle_0= ruleCircle | this_Polygon_1= rulePolygon ) ;
    public final EObject ruleSurface() throws RecognitionException {
        EObject current = null;

        EObject this_Circle_0 = null;

        EObject this_Polygon_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1999:28: ( (this_Circle_0= ruleCircle | this_Polygon_1= rulePolygon ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2000:1: (this_Circle_0= ruleCircle | this_Polygon_1= rulePolygon )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2000:1: (this_Circle_0= ruleCircle | this_Polygon_1= rulePolygon )
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==42) ) {
                alt37=1;
            }
            else if ( (LA37_0==44) ) {
                alt37=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 37, 0, input);

                throw nvae;
            }
            switch (alt37) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2001:5: this_Circle_0= ruleCircle
                    {
                     
                            newCompositeNode(grammarAccess.getSurfaceAccess().getCircleParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleCircle_in_ruleSurface4169);
                    this_Circle_0=ruleCircle();

                    state._fsp--;

                     
                            current = this_Circle_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2011:5: this_Polygon_1= rulePolygon
                    {
                     
                            newCompositeNode(grammarAccess.getSurfaceAccess().getPolygonParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_rulePolygon_in_ruleSurface4196);
                    this_Polygon_1=rulePolygon();

                    state._fsp--;

                     
                            current = this_Polygon_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSurface"


    // $ANTLR start "entryRuleCircle"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2027:1: entryRuleCircle returns [EObject current=null] : iv_ruleCircle= ruleCircle EOF ;
    public final EObject entryRuleCircle() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCircle = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2028:2: (iv_ruleCircle= ruleCircle EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2029:2: iv_ruleCircle= ruleCircle EOF
            {
             newCompositeNode(grammarAccess.getCircleRule()); 
            pushFollow(FOLLOW_ruleCircle_in_entryRuleCircle4231);
            iv_ruleCircle=ruleCircle();

            state._fsp--;

             current =iv_ruleCircle; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleCircle4241); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCircle"


    // $ANTLR start "ruleCircle"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2036:1: ruleCircle returns [EObject current=null] : (otherlv_0= 'circle' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'radius' otherlv_6= ':' ( (lv_radius_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? otherlv_19= '}' ) ;
    public final EObject ruleCircle() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_radius_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_height_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_texture_15_0=null;
        Token otherlv_16=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        EObject lv_translation_3_0 = null;

        EObject lv_margin_17_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2039:28: ( (otherlv_0= 'circle' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'radius' otherlv_6= ':' ( (lv_radius_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? otherlv_19= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2040:1: (otherlv_0= 'circle' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'radius' otherlv_6= ':' ( (lv_radius_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? otherlv_19= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2040:1: (otherlv_0= 'circle' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'radius' otherlv_6= ':' ( (lv_radius_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? otherlv_19= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2040:3: otherlv_0= 'circle' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' otherlv_5= 'radius' otherlv_6= ':' ( (lv_radius_7_0= RULE_STRING ) ) otherlv_8= ';' otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? otherlv_19= '}'
            {
            otherlv_0=(Token)match(input,42,FOLLOW_42_in_ruleCircle4278); 

                	newLeafNode(otherlv_0, grammarAccess.getCircleAccess().getCircleKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2044:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2045:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2045:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2046:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleCircle4295); 

            			newLeafNode(lv_name_1_0, grammarAccess.getCircleAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getCircleRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleCircle4312); 

                	newLeafNode(otherlv_2, grammarAccess.getCircleAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2066:1: ( (lv_translation_3_0= ruleTranslation ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2067:1: (lv_translation_3_0= ruleTranslation )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2067:1: (lv_translation_3_0= ruleTranslation )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2068:3: lv_translation_3_0= ruleTranslation
            {
             
            	        newCompositeNode(grammarAccess.getCircleAccess().getTranslationTranslationParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTranslation_in_ruleCircle4333);
            lv_translation_3_0=ruleTranslation();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCircleRule());
            	        }
                   		set(
                   			current, 
                   			"translation",
                    		lv_translation_3_0, 
                    		"Translation");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,16,FOLLOW_16_in_ruleCircle4345); 

                	newLeafNode(otherlv_4, grammarAccess.getCircleAccess().getSemicolonKeyword_4());
                
            otherlv_5=(Token)match(input,43,FOLLOW_43_in_ruleCircle4357); 

                	newLeafNode(otherlv_5, grammarAccess.getCircleAccess().getRadiusKeyword_5());
                
            otherlv_6=(Token)match(input,18,FOLLOW_18_in_ruleCircle4369); 

                	newLeafNode(otherlv_6, grammarAccess.getCircleAccess().getColonKeyword_6());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2096:1: ( (lv_radius_7_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2097:1: (lv_radius_7_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2097:1: (lv_radius_7_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2098:3: lv_radius_7_0= RULE_STRING
            {
            lv_radius_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleCircle4386); 

            			newLeafNode(lv_radius_7_0, grammarAccess.getCircleAccess().getRadiusSTRINGTerminalRuleCall_7_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getCircleRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"radius",
                    		lv_radius_7_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_8=(Token)match(input,16,FOLLOW_16_in_ruleCircle4403); 

                	newLeafNode(otherlv_8, grammarAccess.getCircleAccess().getSemicolonKeyword_8());
                
            otherlv_9=(Token)match(input,20,FOLLOW_20_in_ruleCircle4415); 

                	newLeafNode(otherlv_9, grammarAccess.getCircleAccess().getHeightKeyword_9());
                
            otherlv_10=(Token)match(input,18,FOLLOW_18_in_ruleCircle4427); 

                	newLeafNode(otherlv_10, grammarAccess.getCircleAccess().getColonKeyword_10());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2126:1: ( (lv_height_11_0= RULE_STRING ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2127:1: (lv_height_11_0= RULE_STRING )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2127:1: (lv_height_11_0= RULE_STRING )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2128:3: lv_height_11_0= RULE_STRING
            {
            lv_height_11_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleCircle4444); 

            			newLeafNode(lv_height_11_0, grammarAccess.getCircleAccess().getHeightSTRINGTerminalRuleCall_11_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getCircleRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"height",
                    		lv_height_11_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_12=(Token)match(input,16,FOLLOW_16_in_ruleCircle4461); 

                	newLeafNode(otherlv_12, grammarAccess.getCircleAccess().getSemicolonKeyword_12());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2148:1: (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )?
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( (LA38_0==21) ) {
                alt38=1;
            }
            switch (alt38) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2148:3: otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';'
                    {
                    otherlv_13=(Token)match(input,21,FOLLOW_21_in_ruleCircle4474); 

                        	newLeafNode(otherlv_13, grammarAccess.getCircleAccess().getTextureKeyword_13_0());
                        
                    otherlv_14=(Token)match(input,18,FOLLOW_18_in_ruleCircle4486); 

                        	newLeafNode(otherlv_14, grammarAccess.getCircleAccess().getColonKeyword_13_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2156:1: ( (lv_texture_15_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2157:1: (lv_texture_15_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2157:1: (lv_texture_15_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2158:3: lv_texture_15_0= RULE_STRING
                    {
                    lv_texture_15_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleCircle4503); 

                    			newLeafNode(lv_texture_15_0, grammarAccess.getCircleAccess().getTextureSTRINGTerminalRuleCall_13_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getCircleRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_15_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_16=(Token)match(input,16,FOLLOW_16_in_ruleCircle4520); 

                        	newLeafNode(otherlv_16, grammarAccess.getCircleAccess().getSemicolonKeyword_13_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2178:3: ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )?
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==39) ) {
                alt39=1;
            }
            switch (alt39) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2178:4: ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2178:4: ( (lv_margin_17_0= ruleMargin ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2179:1: (lv_margin_17_0= ruleMargin )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2179:1: (lv_margin_17_0= ruleMargin )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2180:3: lv_margin_17_0= ruleMargin
                    {
                     
                    	        newCompositeNode(grammarAccess.getCircleAccess().getMarginMarginParserRuleCall_14_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleMargin_in_ruleCircle4544);
                    lv_margin_17_0=ruleMargin();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getCircleRule());
                    	        }
                           		set(
                           			current, 
                           			"margin",
                            		lv_margin_17_0, 
                            		"Margin");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_18=(Token)match(input,16,FOLLOW_16_in_ruleCircle4556); 

                        	newLeafNode(otherlv_18, grammarAccess.getCircleAccess().getSemicolonKeyword_14_1());
                        

                    }
                    break;

            }

            otherlv_19=(Token)match(input,13,FOLLOW_13_in_ruleCircle4570); 

                	newLeafNode(otherlv_19, grammarAccess.getCircleAccess().getRightCurlyBracketKeyword_15());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCircle"


    // $ANTLR start "entryRulePolygon"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2212:1: entryRulePolygon returns [EObject current=null] : iv_rulePolygon= rulePolygon EOF ;
    public final EObject entryRulePolygon() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePolygon = null;


        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2213:2: (iv_rulePolygon= rulePolygon EOF )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2214:2: iv_rulePolygon= rulePolygon EOF
            {
             newCompositeNode(grammarAccess.getPolygonRule()); 
            pushFollow(FOLLOW_rulePolygon_in_entryRulePolygon4606);
            iv_rulePolygon=rulePolygon();

            state._fsp--;

             current =iv_rulePolygon; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePolygon4616); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePolygon"


    // $ANTLR start "rulePolygon"
    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2221:1: rulePolygon returns [EObject current=null] : (otherlv_0= 'polygon' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? ( (lv_points_19_0= rulePoint ) )* otherlv_20= '}' ) ;
    public final EObject rulePolygon() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_width_7_0=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token lv_height_11_0=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token lv_texture_15_0=null;
        Token otherlv_16=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        EObject lv_translation_3_0 = null;

        EObject lv_margin_17_0 = null;

        EObject lv_points_19_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2224:28: ( (otherlv_0= 'polygon' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? ( (lv_points_19_0= rulePoint ) )* otherlv_20= '}' ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2225:1: (otherlv_0= 'polygon' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? ( (lv_points_19_0= rulePoint ) )* otherlv_20= '}' )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2225:1: (otherlv_0= 'polygon' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? ( (lv_points_19_0= rulePoint ) )* otherlv_20= '}' )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2225:3: otherlv_0= 'polygon' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( (lv_translation_3_0= ruleTranslation ) ) otherlv_4= ';' (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )? (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )? (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )? ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )? ( (lv_points_19_0= rulePoint ) )* otherlv_20= '}'
            {
            otherlv_0=(Token)match(input,44,FOLLOW_44_in_rulePolygon4653); 

                	newLeafNode(otherlv_0, grammarAccess.getPolygonAccess().getPolygonKeyword_0());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2229:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2230:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2230:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2231:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePolygon4670); 

            			newLeafNode(lv_name_1_0, grammarAccess.getPolygonAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPolygonRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_rulePolygon4687); 

                	newLeafNode(otherlv_2, grammarAccess.getPolygonAccess().getLeftCurlyBracketKeyword_2());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2251:1: ( (lv_translation_3_0= ruleTranslation ) )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2252:1: (lv_translation_3_0= ruleTranslation )
            {
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2252:1: (lv_translation_3_0= ruleTranslation )
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2253:3: lv_translation_3_0= ruleTranslation
            {
             
            	        newCompositeNode(grammarAccess.getPolygonAccess().getTranslationTranslationParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTranslation_in_rulePolygon4708);
            lv_translation_3_0=ruleTranslation();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getPolygonRule());
            	        }
                   		set(
                   			current, 
                   			"translation",
                    		lv_translation_3_0, 
                    		"Translation");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_4=(Token)match(input,16,FOLLOW_16_in_rulePolygon4720); 

                	newLeafNode(otherlv_4, grammarAccess.getPolygonAccess().getSemicolonKeyword_4());
                
            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2273:1: (otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';' )?
            int alt40=2;
            int LA40_0 = input.LA(1);

            if ( (LA40_0==17) ) {
                alt40=1;
            }
            switch (alt40) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2273:3: otherlv_5= 'width' otherlv_6= ':' ( (lv_width_7_0= RULE_STRING ) ) otherlv_8= ';'
                    {
                    otherlv_5=(Token)match(input,17,FOLLOW_17_in_rulePolygon4733); 

                        	newLeafNode(otherlv_5, grammarAccess.getPolygonAccess().getWidthKeyword_5_0());
                        
                    otherlv_6=(Token)match(input,18,FOLLOW_18_in_rulePolygon4745); 

                        	newLeafNode(otherlv_6, grammarAccess.getPolygonAccess().getColonKeyword_5_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2281:1: ( (lv_width_7_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2282:1: (lv_width_7_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2282:1: (lv_width_7_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2283:3: lv_width_7_0= RULE_STRING
                    {
                    lv_width_7_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePolygon4762); 

                    			newLeafNode(lv_width_7_0, grammarAccess.getPolygonAccess().getWidthSTRINGTerminalRuleCall_5_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getPolygonRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"width",
                            		lv_width_7_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_8=(Token)match(input,16,FOLLOW_16_in_rulePolygon4779); 

                        	newLeafNode(otherlv_8, grammarAccess.getPolygonAccess().getSemicolonKeyword_5_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2303:3: (otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';' )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==20) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2303:5: otherlv_9= 'height' otherlv_10= ':' ( (lv_height_11_0= RULE_STRING ) ) otherlv_12= ';'
                    {
                    otherlv_9=(Token)match(input,20,FOLLOW_20_in_rulePolygon4794); 

                        	newLeafNode(otherlv_9, grammarAccess.getPolygonAccess().getHeightKeyword_6_0());
                        
                    otherlv_10=(Token)match(input,18,FOLLOW_18_in_rulePolygon4806); 

                        	newLeafNode(otherlv_10, grammarAccess.getPolygonAccess().getColonKeyword_6_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2311:1: ( (lv_height_11_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2312:1: (lv_height_11_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2312:1: (lv_height_11_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2313:3: lv_height_11_0= RULE_STRING
                    {
                    lv_height_11_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePolygon4823); 

                    			newLeafNode(lv_height_11_0, grammarAccess.getPolygonAccess().getHeightSTRINGTerminalRuleCall_6_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getPolygonRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"height",
                            		lv_height_11_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_12=(Token)match(input,16,FOLLOW_16_in_rulePolygon4840); 

                        	newLeafNode(otherlv_12, grammarAccess.getPolygonAccess().getSemicolonKeyword_6_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2333:3: (otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';' )?
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==21) ) {
                alt42=1;
            }
            switch (alt42) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2333:5: otherlv_13= 'texture' otherlv_14= ':' ( (lv_texture_15_0= RULE_STRING ) ) otherlv_16= ';'
                    {
                    otherlv_13=(Token)match(input,21,FOLLOW_21_in_rulePolygon4855); 

                        	newLeafNode(otherlv_13, grammarAccess.getPolygonAccess().getTextureKeyword_7_0());
                        
                    otherlv_14=(Token)match(input,18,FOLLOW_18_in_rulePolygon4867); 

                        	newLeafNode(otherlv_14, grammarAccess.getPolygonAccess().getColonKeyword_7_1());
                        
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2341:1: ( (lv_texture_15_0= RULE_STRING ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2342:1: (lv_texture_15_0= RULE_STRING )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2342:1: (lv_texture_15_0= RULE_STRING )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2343:3: lv_texture_15_0= RULE_STRING
                    {
                    lv_texture_15_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePolygon4884); 

                    			newLeafNode(lv_texture_15_0, grammarAccess.getPolygonAccess().getTextureSTRINGTerminalRuleCall_7_2_0()); 
                    		

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getPolygonRule());
                    	        }
                           		setWithLastConsumed(
                           			current, 
                           			"texture",
                            		lv_texture_15_0, 
                            		"STRING");
                    	    

                    }


                    }

                    otherlv_16=(Token)match(input,16,FOLLOW_16_in_rulePolygon4901); 

                        	newLeafNode(otherlv_16, grammarAccess.getPolygonAccess().getSemicolonKeyword_7_3());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2363:3: ( ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';' )?
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==39) ) {
                alt43=1;
            }
            switch (alt43) {
                case 1 :
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2363:4: ( (lv_margin_17_0= ruleMargin ) ) otherlv_18= ';'
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2363:4: ( (lv_margin_17_0= ruleMargin ) )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2364:1: (lv_margin_17_0= ruleMargin )
                    {
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2364:1: (lv_margin_17_0= ruleMargin )
                    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2365:3: lv_margin_17_0= ruleMargin
                    {
                     
                    	        newCompositeNode(grammarAccess.getPolygonAccess().getMarginMarginParserRuleCall_8_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleMargin_in_rulePolygon4925);
                    lv_margin_17_0=ruleMargin();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getPolygonRule());
                    	        }
                           		set(
                           			current, 
                           			"margin",
                            		lv_margin_17_0, 
                            		"Margin");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_18=(Token)match(input,16,FOLLOW_16_in_rulePolygon4937); 

                        	newLeafNode(otherlv_18, grammarAccess.getPolygonAccess().getSemicolonKeyword_8_1());
                        

                    }
                    break;

            }

            // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2385:3: ( (lv_points_19_0= rulePoint ) )*
            loop44:
            do {
                int alt44=2;
                int LA44_0 = input.LA(1);

                if ( (LA44_0==32) ) {
                    alt44=1;
                }


                switch (alt44) {
            	case 1 :
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2386:1: (lv_points_19_0= rulePoint )
            	    {
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2386:1: (lv_points_19_0= rulePoint )
            	    // ../org.xtext.example.mydsl/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:2387:3: lv_points_19_0= rulePoint
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPolygonAccess().getPointsPointParserRuleCall_9_0()); 
            	    	    
            	    pushFollow(FOLLOW_rulePoint_in_rulePolygon4960);
            	    lv_points_19_0=rulePoint();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPolygonRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"points",
            	            		lv_points_19_0, 
            	            		"Point");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop44;
                }
            } while (true);

            otherlv_20=(Token)match(input,13,FOLLOW_13_in_rulePolygon4973); 

                	newLeafNode(otherlv_20, grammarAccess.getPolygonAccess().getRightCurlyBracketKeyword_10());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePolygon"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModel85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleType_in_ruleModel130 = new BitSet(new long[]{0x0000000000004802L});
    public static final BitSet FOLLOW_ruleType_in_entryRuleType166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleType176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLibrary_in_ruleType223 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleScene_in_ruleType250 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLibrary_in_entryRuleLibrary285 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLibrary295 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleLibrary332 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleLibrary349 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleLibrary366 = new BitSet(new long[]{0x0000000010202000L});
    public static final BitSet FOLLOW_ruleTexture_in_ruleLibrary387 = new BitSet(new long[]{0x0000000010202000L});
    public static final BitSet FOLLOW_rulePrototype_in_ruleLibrary409 = new BitSet(new long[]{0x0000000010002000L});
    public static final BitSet FOLLOW_13_in_ruleLibrary422 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleScene_in_entryRuleScene458 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleScene468 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_ruleScene505 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleScene522 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleScene539 = new BitSet(new long[]{0x000016000000A000L});
    public static final BitSet FOLLOW_ruleParametric_in_ruleScene560 = new BitSet(new long[]{0x000016000000A000L});
    public static final BitSet FOLLOW_ruleBuilding_in_ruleScene582 = new BitSet(new long[]{0x0000160000002000L});
    public static final BitSet FOLLOW_ruleSurface_in_ruleScene604 = new BitSet(new long[]{0x0000140000002000L});
    public static final BitSet FOLLOW_13_in_ruleScene617 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParametric_in_entryRuleParametric653 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParametric663 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_ruleParametric700 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParametric717 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleParametric734 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_ruleTranslation_in_ruleParametric755 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleParametric767 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleParametric779 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleParametric791 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleParametric808 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleParametric825 = new BitSet(new long[]{0x0000000000382000L});
    public static final BitSet FOLLOW_19_in_ruleParametric838 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleParametric850 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleParametric867 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleParametric884 = new BitSet(new long[]{0x0000000000302000L});
    public static final BitSet FOLLOW_20_in_ruleParametric899 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleParametric911 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleParametric928 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleParametric945 = new BitSet(new long[]{0x0000000000202000L});
    public static final BitSet FOLLOW_21_in_ruleParametric960 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleParametric972 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleParametric989 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleParametric1006 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleParametric1020 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTexture_in_entryRuleTexture1056 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTexture1066 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleTexture1103 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTexture1120 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleTexture1137 = new BitSet(new long[]{0x0000000000C02000L});
    public static final BitSet FOLLOW_22_in_ruleTexture1150 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleTexture1162 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTexture1179 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTexture1196 = new BitSet(new long[]{0x0000000000802000L});
    public static final BitSet FOLLOW_23_in_ruleTexture1211 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleTexture1223 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTexture1240 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleTexture1257 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleTexture1271 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTranslation_in_entryRuleTranslation1307 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTranslation1317 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleTranslation1354 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleTranslation1366 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTranslation1383 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleTranslation1400 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTranslation1417 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleTranslation1434 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTranslation1451 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_ruleTranslation1468 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrototype_in_entryRulePrototype1504 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePrototype1514 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_rulePrototype1551 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePrototype1568 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_rulePrototype1585 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_ruleTranslation_in_rulePrototype1606 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePrototype1618 = new BitSet(new long[]{0x0000002A20002000L});
    public static final BitSet FOLLOW_ruleWall_in_rulePrototype1639 = new BitSet(new long[]{0x0000002A20002000L});
    public static final BitSet FOLLOW_ruleOpening_in_rulePrototype1661 = new BitSet(new long[]{0x0000002A00002000L});
    public static final BitSet FOLLOW_ruleRoof_in_rulePrototype1683 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_rulePrototype1696 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWall_in_entryRuleWall1732 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleWall1742 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleWall1779 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleWall1796 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleWall1813 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_30_in_ruleWall1825 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWall1837 = new BitSet(new long[]{0x0000000100000000L});
    public static final BitSet FOLLOW_rulePoint_in_ruleWall1858 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWall1870 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_31_in_ruleWall1882 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWall1894 = new BitSet(new long[]{0x0000000100000000L});
    public static final BitSet FOLLOW_rulePoint_in_ruleWall1915 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWall1927 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleWall1939 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWall1951 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWall1968 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWall1985 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleWall1997 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWall2009 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWall2026 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWall2043 = new BitSet(new long[]{0x0000002800002000L});
    public static final BitSet FOLLOW_ruleDoor_in_ruleWall2064 = new BitSet(new long[]{0x0000002800002000L});
    public static final BitSet FOLLOW_ruleWindow_in_ruleWall2086 = new BitSet(new long[]{0x0000002800002000L});
    public static final BitSet FOLLOW_13_in_ruleWall2099 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePoint_in_entryRulePoint2135 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePoint2145 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_rulePoint2182 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_rulePoint2194 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePoint2211 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_rulePoint2228 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePoint2245 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_27_in_rulePoint2262 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRoof_in_entryRuleRoof2298 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRoof2308 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleRoof2345 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRoof2362 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleRoof2379 = new BitSet(new long[]{0x0000000400202000L});
    public static final BitSet FOLLOW_34_in_ruleRoof2392 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleRoof2404 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleRoof2421 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleRoof2438 = new BitSet(new long[]{0x0000000000202000L});
    public static final BitSet FOLLOW_21_in_ruleRoof2453 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleRoof2465 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleRoof2482 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleRoof2499 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleRoof2513 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpening_in_entryRuleOpening2549 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpening2559 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDoor_in_ruleOpening2606 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWindow_in_ruleOpening2633 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDoor_in_entryRuleDoor2668 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDoor2678 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleDoor2715 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDoor2732 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleDoor2749 = new BitSet(new long[]{0x0000009001322000L});
    public static final BitSet FOLLOW_ruleTranslation_in_ruleDoor2771 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor2783 = new BitSet(new long[]{0x0000009000322000L});
    public static final BitSet FOLLOW_36_in_ruleDoor2798 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDoor2810 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDoor2827 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor2844 = new BitSet(new long[]{0x0000008000322000L});
    public static final BitSet FOLLOW_17_in_ruleDoor2859 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDoor2871 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDoor2888 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor2905 = new BitSet(new long[]{0x0000008000302000L});
    public static final BitSet FOLLOW_20_in_ruleDoor2920 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDoor2932 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDoor2949 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor2966 = new BitSet(new long[]{0x0000008000202000L});
    public static final BitSet FOLLOW_21_in_ruleDoor2981 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleDoor2993 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDoor3010 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor3027 = new BitSet(new long[]{0x0000008000002000L});
    public static final BitSet FOLLOW_ruleMargin_in_ruleDoor3051 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleDoor3063 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleDoor3077 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleWindow_in_entryRuleWindow3113 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleWindow3123 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleWindow3160 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleWindow3177 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleWindow3194 = new BitSet(new long[]{0x000000D101322000L});
    public static final BitSet FOLLOW_ruleTranslation_in_ruleWindow3216 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3228 = new BitSet(new long[]{0x000000D100322000L});
    public static final BitSet FOLLOW_36_in_ruleWindow3243 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWindow3255 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWindow3272 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3289 = new BitSet(new long[]{0x000000C100322000L});
    public static final BitSet FOLLOW_17_in_ruleWindow3304 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWindow3316 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWindow3333 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3350 = new BitSet(new long[]{0x000000C100302000L});
    public static final BitSet FOLLOW_20_in_ruleWindow3365 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWindow3377 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWindow3394 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3411 = new BitSet(new long[]{0x000000C100202000L});
    public static final BitSet FOLLOW_38_in_ruleWindow3426 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWindow3438 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWindow3455 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3472 = new BitSet(new long[]{0x0000008100202000L});
    public static final BitSet FOLLOW_21_in_ruleWindow3487 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleWindow3499 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleWindow3516 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3533 = new BitSet(new long[]{0x0000008100002000L});
    public static final BitSet FOLLOW_ruleMargin_in_ruleWindow3557 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleWindow3569 = new BitSet(new long[]{0x0000000100002000L});
    public static final BitSet FOLLOW_rulePoint_in_ruleWindow3592 = new BitSet(new long[]{0x0000000100002000L});
    public static final BitSet FOLLOW_13_in_ruleWindow3605 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMargin_in_entryRuleMargin3641 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMargin3651 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleMargin3688 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMargin3705 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleMargin3722 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_ruleMargin3734 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleMargin3746 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMargin3763 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleMargin3780 = new BitSet(new long[]{0x0000000000202000L});
    public static final BitSet FOLLOW_21_in_ruleMargin3793 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleMargin3805 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMargin3822 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleMargin3839 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleMargin3853 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBuilding_in_entryRuleBuilding3889 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBuilding3899 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_ruleBuilding3936 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleBuilding3953 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleBuilding3970 = new BitSet(new long[]{0x0000000011000000L});
    public static final BitSet FOLLOW_ruleTranslation_in_ruleBuilding3992 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleBuilding4004 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_ruleBuilding4018 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleBuilding4030 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleBuilding4047 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleBuilding4064 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleBuilding4076 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSurface_in_entryRuleSurface4112 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSurface4122 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCircle_in_ruleSurface4169 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePolygon_in_ruleSurface4196 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCircle_in_entryRuleCircle4231 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCircle4241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleCircle4278 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleCircle4295 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleCircle4312 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_ruleTranslation_in_ruleCircle4333 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleCircle4345 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_43_in_ruleCircle4357 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleCircle4369 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleCircle4386 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleCircle4403 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_ruleCircle4415 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleCircle4427 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleCircle4444 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleCircle4461 = new BitSet(new long[]{0x0000008000202000L});
    public static final BitSet FOLLOW_21_in_ruleCircle4474 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleCircle4486 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleCircle4503 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleCircle4520 = new BitSet(new long[]{0x0000008000002000L});
    public static final BitSet FOLLOW_ruleMargin_in_ruleCircle4544 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleCircle4556 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleCircle4570 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePolygon_in_entryRulePolygon4606 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePolygon4616 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_44_in_rulePolygon4653 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePolygon4670 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_rulePolygon4687 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_ruleTranslation_in_rulePolygon4708 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePolygon4720 = new BitSet(new long[]{0x0000008100322000L});
    public static final BitSet FOLLOW_17_in_rulePolygon4733 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_rulePolygon4745 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePolygon4762 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePolygon4779 = new BitSet(new long[]{0x0000008100302000L});
    public static final BitSet FOLLOW_20_in_rulePolygon4794 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_rulePolygon4806 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePolygon4823 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePolygon4840 = new BitSet(new long[]{0x0000008100202000L});
    public static final BitSet FOLLOW_21_in_rulePolygon4855 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_rulePolygon4867 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePolygon4884 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePolygon4901 = new BitSet(new long[]{0x0000008100002000L});
    public static final BitSet FOLLOW_ruleMargin_in_rulePolygon4925 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePolygon4937 = new BitSet(new long[]{0x0000000100002000L});
    public static final BitSet FOLLOW_rulePoint_in_rulePolygon4960 = new BitSet(new long[]{0x0000000100002000L});
    public static final BitSet FOLLOW_13_in_rulePolygon4973 = new BitSet(new long[]{0x0000000000000002L});

}